50 pts 求条
查看原帖
50 pts 求条
1380753
Ikun_xiaoheizi楼主2025/7/21 08:14

TLE on #11~#20

#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
bool flag;
int ans[1000005];
int f[1000005];
void dfs(int a, int b, int k, int d) {
	if (k == d + 1) {
		return ;
	}
	if (a == 1 && k == d && b > f[k - 1]) {
		f[k] = b;
		flag = 1;
		if (!flag || b < ans[k]) {
			memcpy(ans, f, sizeof(f));
		}
		return ;
	}
	int x = max(b / a, f[k - 1]) + 1;
	int y = min({(d - k + 1) * b / a, INT_MAX / a, ans[d] - 1});
	for (int i = x; i <= y; i++) {
		f[k] = i;
		int t = __gcd(b * i, a * i - b);
		dfs((a * i - b) / t, (b * i) / t, k + 1, d);
	}
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int x, y;
	cin >> x >> y;
	memset(ans, 0x3f, sizeof(ans));
	int k = __gcd(x, y);
	x /= k, y /= k;
	for (int d = 1; d <= 200; d++) {
		dfs(x, y, 1, d);
		if (flag) {
			for (int i = 1; i <= d; i++) {
				cout << ans[i] << " ";
			}
			return 0;
		}
	}
	return 0;
}
2025/7/21 08:14
加载中...