Nowcoder9981I.限制不互素对的排列(构造)

链接:https://ac.nowcoder.com/acm/contest/9981/I
来源:牛客网

输入一个数 ,请构造一个长度为 的排列,使得其中正好有 对相邻的数gcd(最大公约数)大于
排列是指 一共 个数,每个数都出现过且仅出现过 次。例如, 是一个排列,而 则不是排列

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
int n,k;
int vis[maxn];
int main () {
    scanf("%d%d",&n,&k);
    if (k<n/2) {
        for (int i=2;i<=(k+1)*2;i+=2) printf("%d ",i);
        for (int i=1;i<=n;i++) if (i%2||i>(k+1)*2) printf("%d ",i);
        printf("\n");
        return 0;  
    }
    int r=-1;
    for (int i=2;i<=k*2;i+=2) if (i%3==0) {
        r=i;
        break;
    }
    if (r==-1) return printf("-1\n"),0;
    for (int i=2;i<=k*2;i+=2) {
        if (i==r) continue;
        printf("%d ",i);
    }
    printf("%d ",r);
    printf("3 ");
    for (int i=1;i<=n;i++) {
        if (i==3) continue;
        if (i%2||i>k*2) printf("%d ",i);
    }
}  

 

posted @ 2021-02-01 21:45  zlc0405  阅读(107)  评论(0编辑  收藏  举报