社区讨论

70pts 求助

P2118[NOIP 2014 普及组] 比例简化参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo15vu5g
此快照首次捕获于
2023/10/22 15:42
2 年前
此快照最后确认于
2023/11/02 15:17
2 年前
查看原帖
考试时我怕此题爆精度,所以没用 doubledouble 类型,用的乘法,结果 WAWA 了 3 个点,求助。

代码如下:

C
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
int a,b,l,ans1,minn1=1e13,ans2,minn2=1e13,m,temp,temp1,temp2,x,y;
int _min(int x,int y){
	return x<y?x:y;
}
bool huzhi(int x,int y){
	if(x%y==0 || y%x==0)return false;
	for(int i=2;i*i<=_min(x,y);i++){
		if(x%i==0 && y%i==0)return false;
	} 
	return true;
}
int gcd(int a,int b){
	if(b==0)return a;
	return gcd(b,a%b);
}
int lcm(int a,int b){
	return a*b/gcd(a,b);
}
void bijiao(int i,int j,int a,int b,int n,int m){
	int t=i-a;
	if(minn1==1e13 && minn2==1e13){
		ans1=n;
		ans2=m;
		minn1=t;
		minn2=j;
		return ;
	}
	if(t*minn2<j*minn1){
		ans1=n;
		ans2=m;
		minn1=t;
		minn2=j;
	}
	return ;
}
signed main(){
	//freopen("ratio.in","r",stdin);
	//freopen("ratio.out","w",stdout);
	cin>>a>>b>>l;
	for(int i=1;i<=l;i++){
		for(int j=1;j<=l;j++){
			if(i*b>=a*j){
				if(huzhi(i,j)){
					temp=lcm(j,b);	 
					temp1=temp/j;
					temp2=temp/b;
					x=i*temp1;
					y=a*temp2;
					bijiao(x,temp,y,temp,i,j);
				}			
			}
		}
	}
	cout<<ans1<<' '<<ans2;
	return 0;
}
rt.

回复

1 条回复,欢迎继续交流。

正在加载回复...