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); } }