rt,最后一个点挂了
感觉是死循环了
#include<bits/stdc++.h>
#define ll long long
#define YJL_DRC_LCH_WJY_WQY_ZZH using
#define AK namespace
#define IOI std
#define V vector<int>
#define sz size()
YJL_DRC_LCH_WJY_WQY_ZZH AK IOI;
const int MAX=10000000;
ll gcd(ll x,ll y)
{
if(x<y)swap(x,y);
return y?gcd(y,x%y):x;
}
ll lcm(ll x,ll y){return (ll)x*y/gcd(x,y);}
struct frac
{
ll fz,fm;
frac(ll Fz=0,ll Fm=0):fz(Fz),fm(Fm){}
double val(){return (double)fz/fm;}
frac operator-(const frac B)
{
if(fz*B.fm==fm*B.fz)return frac(0,1);
ll t=lcm(fm,B.fm),u=t/fm,v=t/B.fm;
frac res;
res.fz=u*fz-v*B.fz,res.fm=t;
ll g=gcd(res.fz,res.fm);
res.fz/=g,res.fm/=g;
return res;
}
}N;
V ans,now;
int maxdep;
void chk()
{
bool ok;
if(now.sz!=ans.sz||!ans.sz)ok=now.sz<ans.sz||!ans.sz;
else
{
for(int i=now.sz-1;~i;--i)
if(now[i]!=ans[i])
{
ok=now[i]<ans[i];
break;
}
}
if(ok)ans=now;
}
void print(V an)
{
for(int i=0;i<maxdep;i++)cout<<an[i]<<" ";
cout<<endl;
}
void dfs(frac n)
{
if(!n.fz){chk();/*print(now);*/return;}
int si=now.sz;
if(si>=maxdep)return;
for(int i=max(si?now.back()+1:2,(int)ceil((double)n.fm/n.fz));i<=MAX;i++)
{
if(si+(int)ceil((double)n.fz*i/n.fm)>maxdep)break;
now.push_back(i);
dfs(n-frac(1,i));
now.pop_back();
}
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>N.fz>>N.fm;
for(maxdep=1;ans.empty();maxdep++)dfs(N);
print(ans);
return 0;
}