hackWA,那位dailao帮调
查看原帖
hackWA,那位dailao帮调
1294257
zyx_Henry楼主2024/7/13 21:26
#include<bits/stdc++.h>
using namespace std;
long long arr[100005],ans[100005];
int flag;
long long inline gcd(long long a,long b)
{
	if(b==0)
		return a;
	return gcd(b,a%b);
}
long long inline lcm(long long a,long long b)
{
	return a/gcd(a,b)*b;
}
void inline dfs(int layer,long long a,long long b,int it)
{
	long long t1,t2,d1,d2,i;
	if(it==1)
	{
		if(a==1)
		{
			arr[layer]=b;
			if(!flag&&b!=arr[layer-1])
			{
				flag=1;
				for(i=1;i<=layer;++i)
					ans[i]=arr[i];
			}
			else if(flag&&arr[layer]<ans[layer]&&b!=arr[layer-1])
			{
				for(i=1;i<=layer;++i)
					ans[i]=arr[i];
			}
		}
		return ;
	}
	t1=max((long long)ceil(1.0*b/a),arr[layer-1]);
	t2=max(arr[layer-1],(long long)floor(1.0*it*b/a));
	for(i=t1;i<=t2;++i)
	{
		arr[layer]=i;
		d2=lcm(b,i);
		d1=d2/b*a-d2/i;
		long long c=gcd(d1,d2);
		d2/=c;
		d1/=c;
		dfs(layer+1,d1,d2,it-1);
	}
}
int main()
{
	int a,b,i,j;
	scanf("%d %d",&a,&b);
	for(i=1;;++i)
	{
		flag=0;
		dfs(1,a,b,i);
		if(flag)
			break;
	}
	for(j=1;j<=i;++j)
		printf("%lld ",ans[j]);
	return 0;
}
2024/7/13 21:26
加载中...