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];
    }
}
posted @ 2025-07-04 09:45  _Yxc  阅读(6)  评论(0)    收藏  举报