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;
}

浙公网安备 33010602011771号