P1763求调
  • 板块学术版
  • 楼主tc291311
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/8 09:25
  • 上次更新2025/2/8 11:33:05
查看原帖
P1763求调
1340395
tc291311楼主2025/2/8 09:25

评测记录

CODE

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a,b,c,deep,flag,num1[505],num2[505];
ll gcd(ll n,ll m){
	if(n%m==0)	return m;
	return gcd(m,n%m);
}
void dfs(ll a,ll b,ll dep){
	if(dep>deep||a<0||b>1e7)	return ;
	if(a==1&&b>num1[dep-1]){
		num1[dep]=b;
		if(!flag||num1[dep]<num2[dep]){
			for(ll i=1;i<=dep;i++){
				num2[i]=num1[i];
			}
		}
		flag=1;
		return ;
	}
	ll r=b/a*(deep-dep+1);
	if(flag&&num2[deep]<=r)	r=num2[deep]-1;
	for(ll i=max(b/a,num1[dep-1]+1);i<r;i++){
		num1[dep]=i;
		dfs((a*i-b)/gcd(a*i-b,b*i),b*i/gcd(a*i-b,b*i),dep+1);
		num1[dep]=0;
	}
	
}
int main(){
	cin>>a>>b;
	c=gcd(a,b);
	a/=c;
	b/=c;
	for(deep=0;;deep++){
		dfs(a,b,1);
		if(flag){
			for(ll i=1;i<=deep;i++){
				cout<<num2[i]<<" ";
			}
			break;
		}
	}
	return 0;
}
2025/2/8 09:25
加载中...