emmm...
之前做的,发现做错了,点进去一看却发现最后一个绑定的特殊样例TLE了...
我试图卡常卡过去
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int a , b;
int sd = 1;
ll sum[105];
ll print[105];
bool temp = 0;
inline void dfs(ll x , ll y , ll s)
{
if (s == sd)
{
register ll gcd = __gcd(x , y);
x /= gcd;
y /= gcd;
if (x == 1 and y and y > sum[s - 1])
{
if (!temp || y < print[s])
{
for (register int i = 1 ; i <= s ; i++)
{
print[i] = sum[i];
}
print[s] = y;
temp = 1;
}
}
return ;
}
register int minn = sum[s - 1] + 1 , maxx = (sd - s + 1) * y / x + 2;
register ll nx , ny;
for (register int i = minn ; i <= maxx ; i++)
{
sum[s] = i;
nx = x * i - y;
ny = y * i;
dfs(nx , ny , s + 1);
}
}
int main()
{
scanf("%d%d",&a,&b);
register int gcd = __gcd(a , b);
a /= gcd;
b /= gcd;
sd = 2;
while (1)
{
dfs(a , b , 1);
if (temp)break;
sd++;
}
// cout << sd <<'\n';
for (register int i = 1 ; i <= sd ; i++)
{
printf("%d ",print[i]);
}
return 0;
}