二分解法20分
查看原帖
二分解法20分
1021365
Crab_Tang楼主2023/12/16 20:51
#include<bits/stdc++.h>
using namespace std;
int a1,b1,l,a2,b2,eps;
int gcd(int a ,int b){
	if(b==0)return a;
	return gcd(b,a%b);
}
void erfen(int ee,int l,int r){
	while(l<=r){
		int mid=(l+r)>>1;
		double kep=1.0f*ee/mid;
		if(kep-eps>=0){
			double kps=1.0*a2/b2;
			int k=gcd(ee,mid);
			if(kps>=kep){
				a2=ee/k;
				b2=mid/k;
			}
			l=mid+1;
		}
		else
			r=mid-1;
	}
	return;
}
int main(){
	scanf("%d %d %d",&a1,&b1,&l);
	a2=l,b2=1;
	eps=1.0f*a1/b1;
	for(int i=1;i<=l;++i)
		erfen(i,1,l);
	printf("%d %d",a2,b2);
	return 0;
}

有没有别的二分解法的代码?或者帮我改改。不写暴力主要是想练练二分。

2023/12/16 20:51
加载中...