70pts 求助
查看原帖
70pts 求助
1114244
zhoujinze2011楼主2023/10/6 12:42

考试时我怕此题爆精度,所以没用 doubledouble 类型,用的乘法,结果 WAWA 了 3 个点,求助。

代码如下:

#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.

2023/10/6 12:42
加载中...