题解 | 游游的排列构造

游游的排列构造

https://www.nowcoder.com/practice/daface8be3a74d79aac27e56b067f1b0

/*
题目中要求我们构造一种方案满足恰好有k个好元素,其实不难发现如果我们从第k大的数作为第一个好元素开始往后填,但是题目要求我们好元素不相邻,那怎么保证不相邻呢? 隔着填呗,于是就有了这样一种构造方案:
定义好元素 p1 = n - k + 1 正常元素p1 = 1两者挨个填就行,只不过这里要防止好元素越界加上判断条件
*/
#include<bits/stdc++.h>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, k;
    cin >> n >> k;
    int p1 = n - k + 1;
    bool flag = false;
    int p2 = 1;
    for (int i = 1; i <= n; ++i) {
        if (!flag && p1 <= n) {
            cout << p1 << " ";
            p1++;
            flag = true;
        } else {
            cout << p2 << " ";
            p2++;
            flag = false;
        }
    }
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务