E. Klever Permutation
https://codeforces.com/problemset/problem/1927/E
题意:构造一个permutation,这个permutation的所有连续的长度为k的区间和,差值不超过1。
思路:根据要求特性,可以得出最后的n - k + 1个区间和应该是s, s + 1, s, s + 1这种形式的。而第一个区间跟第二个区间只差了一个数,说明a[0] + 1 = a[k]。a[1] - 1 = a[k + 1]。。。。
乱七八糟的,哎。毁灭吧。
inline void solve() {
int n, k;
cin >> n >> k;
vector<int> a(n);
int l = 1, r = n;
for (int i = 0; i < k; ++i) {
for (int j = i; j < n; j += k) {
if (i & 1) {
a[j] = r --;
}
else {
a[j] = l ++;
}
}
}
for (int i = 0; i < n; ++i) {
cout << a[i] << " \n"[i == n - 1];
}
}

浙公网安备 33010602011771号