我是靠谱客的博主 轻松西装,最近开发中收集的这篇文章主要介绍2020ICPC 南京 K Co-prime Permutation(构造),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
题意:
构造一个排列,使得 g c d ( i , p i ) = 1 gcd(i,p_i)=1 gcd(i,pi)=1 p i p_i pi数目严格为 k k k

思路:
因为 1 1 1的存在,所以 k k k一定不会是0。
因为 g c d ( x , x + 1 ) = 1 gcd(x,x+1)=1 gcd(x,x+1)=1,所以只需要交换相邻两个数就可以使得结果加2。
k k k为奇数的时候使得 p 1 = 1 p_1=1 p1=1,然后后面的数相邻两个进行交换就好了。
k k k为偶数的时候从1开始相邻两个数进行交换。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;
const int maxn = 2e3 + 7;
typedef long long ll;

int main() {
    int n,k;scanf("%d%d",&n,&k);
    if(k == 0) {
        printf("-1n");
    } else {
        if(k % 2 == 0) {
            for(int i = 1;i <= k / 2;i++) {
                printf("%d %d ",i * 2,i * 2 - 1);
            }
            for(int i = k + 1;i <= n;i++) {
                printf("%d ",i);
            }
        } else {
            printf("%d ",1);
            for(int i = 2;i <= k;i += 2) {
                printf("%d %d ",i + 1,i);
            }
            for(int i = k + 1;i <= n;i++) {
                printf("%d ",i);
            }
        }
    }
    return 0;
}

最后

以上就是轻松西装为你收集整理的2020ICPC 南京 K Co-prime Permutation(构造)的全部内容,希望文章能够帮你解决2020ICPC 南京 K Co-prime Permutation(构造)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部