#11 TLE 求优化
查看原帖
#11 TLE 求优化
946601
xiuh2333楼主2023/12/26 23:27

如标题

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef __int128_t lnt;
lnt a,b,cd,deep,now[10005],ans[10005];
bool f1=0,f2;//注:f1为是否成功,f2为是否需要更新最优解
lnt gcd(lnt a,lnt b){return b==0?a:gcd(b,a%b);}
void iddfs(lnt a,lnt b,lnt d){
	if(d==deep){
		if(b%a!=0)return;
		if(b/a==now[d-1])return;
		f1=1;
		now[d]=b/a;
		f2=0;
		for(int i=d;i>=0;i--){
			if(ans[i]==now[i]) continue;
			if(ans[i]<now[i]) break;
			else{f2=1;break;}
		}
		if(f2)memcpy(ans,now,sizeof(lnt)*(d+1));
		return;
	}
	for(int i=max(b/a+1,now[d-1]+1);;i++){
		if(b*(deep-d+1)<a*i)break;
		now[d]=i; 
		lnt aa=a*i-b,bb=b*i; 
		cd=gcd(aa,bb);
		aa/=cd,bb/=cd;
		iddfs(aa,bb,d+1);
	}
}
void print(lnt x){
	if(x==0)return;
	print(x/10);
	putchar(x%10+'0');
}
signed main(){
	int a,b;
	cin>>a>>b;
	int cd=gcd(a,b);
	a/=cd,b/=cd;
	for(deep=1;;deep++){
		ans[1]=0,ans[deep]=INF; 
		iddfs(a,b,1);
		if(f1)break; 
	}
	for(int i=1;i<=deep;i++){print(ans[i]);cout<<" ";}
	return 0;
}

颠佬的解释很易懂,但还是TLE了(

2023/12/26 23:27
加载中...