CodeForces-Different Differences

题目

这道题写错了 对于 8 11
1 2 4 7 后面补齐我不知道怎么写 还是看题解学会的 就是判断后面公差为1的数量是否大于剩下的。

		if (st + lianxu <= n && n - st - lianxu >= (k - num - 1)) {
			st += lianxu;
			cnt[++step] = st;
			lianxu++;
			num++;
		}

代码

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int range = 2e5 + 5;
int n;
int k;
int a[range];
int cnt[range];
void solve() {
	cin >> k >> n;
	for (int i = 1; i <= n; i++) {
		cnt[i] = 0;
	}
	int lianxu = 1;
	int num = 1;
	int st = 1;
	cnt[1] = 1;
	int step = 1;
	while (st <= n) {		
		if (num == k) {
			for (int i = 1; i <= step; i++)cout << cnt[i] << " ";
			cout << endl;
			return ;
		}
		if (st + lianxu <= n && n - st - lianxu >= (k - num - 1)) {
			st += lianxu;
			cnt[++step] = st;
			lianxu++;
			num++;
		}

		else {
			int g = cnt[step];
			//	cout<<num<<endl;
			for (int i = g + 1; num < k; i++) {
				cnt[++step] = i;
				num++;
			}
			for (int i = 1; i <= k; i++) {
				cout << cnt[i] << " ";
			}
			cout << endl;
			return ;
		}
	}
}
signed main() {
	ios::sync_with_stdio();
	cin.tie(0);
	cout.tie(0);
	int t;
	cin >> t;
	while (t--)
		solve();
	return 0;


}

posted @ 2025-04-16 19:56  LteShuai  阅读(7)  评论(0)    收藏  举报