251Sec
2024-11-15 08:02:29
我们猜测数据范围内一定有解。
若
我们大胆猜测
接下来我们直接贪心地填这些连续段,每次选择一个长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n; ll k;
vector<int> ans;
int main() {
scanf("%d%lld", &n, &k);
while (n && k >= n - 1) {
printf("1 ");
k -= n - 1, n--;
}
int n0 = n;
for (int i = n; i >= 1; i--) {
while (k >= 1ll * i * (i - 1) / 2 && n >= i) {
k -= 1ll * i * (i - 1) / 2, n -= i;
ans.push_back(i);
}
}
for (int i = 0; i < ans.size(); i++) {
for (int j = 1; j <= ans[i]; j++) printf("%d ", i + n0);
}
return 0;
}