社区讨论
40pts求调,悬2关
P1763埃及分数参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhke08p0
- 此快照首次捕获于
- 2025/11/04 17:49 4 个月前
- 此快照最后确认于
- 2025/11/04 17:49 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int gcd(int a,int b){
if(b==0)return a;
return gcd(b,a%b);
}
struct node{
int f,s;
bool operator<(node x)const{
return f*x.s<s*x.f;
}
bool operator>(node x)const{
return f*x.s>s*x.f;
}
node operator-(node x)const{
int _gcd_=gcd(s,x.s);
node temp;
temp.f=f*x.s/_gcd_-s*x.f/_gcd_;
temp.s=s*x.s/_gcd_;
return temp;
}
node operator/(int x)const{
node temp;
temp.f=f;
temp.s=s*x;
return temp;
}
};
int a,b,depth,flag,minn=2e7+5;
int last[1145],ans[1145];
void yue(node &x){
int _gcd_=gcd(x.f,x.s);
x.f/=_gcd_;
x.s/=_gcd_;
return;
}
node make_(int x,int y){
node temp;
temp.f=x,temp.s=y;
yue(temp);
return temp;
}
void dfs(int x,node now){
yue(now);
if(x==depth){
if(now.f==1&&now.s<minn&&now.s>last[x-1]){
for(int i=1;i<=x-1;i++)ans[i]=last[i];
flag=1;
ans[x]=now.s;
}
return;
}
node maxn=now/(depth-x+1);
yue(maxn);
int k=last[x-1]+1;;
while(make_(1,k)>now)k++;
for(;make_(1,k)>maxn;k++){
last[x]=k;
dfs(x+1,now-make_(1,k));
}
return;
}
signed main(){
cin>>a>>b;
node fir=make_(a,b);
while(++depth){
last[0]=1;
dfs(1,fir);
if(flag){
for(int i=1;i<=depth;i++){
cout<<ans[i]<<" ";
}
return 0;
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...