如标题
#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了(