2020 ICPC 亚洲区域赛(南京) K Co-prime Permutation
思路分析:
这个题给我一种纸老虎的感觉,其实读完题后和队友分析感觉不难,只要分清楚 k 的奇偶然后相邻数字两两交换就行了,外加有特殊情况单独列出来,最后注意一下输出格式,每个数据之间是有空格的(因为格式不对,还wa了两发QAQQQ
AC代码:
#include <bits/stdc++.h>
#define ll long long
const ll N = 10e6 + 5;
using namespace std;
int main() {
ll n, k;
while (~scanf("%lld%lld", &n, &k)) {
if (k == 0) {
printf("-1\n");
continue;
} else if (k == 1) {
for (ll i = 1; i <= n; i++) {
if(i == n) {
printf("%lld\n",i);
} else {
printf("%lld ", i);
}
}
continue;
} else if (k > 1 && k % 2 == 0) {
for (ll i = 2; i <= k; i += 2) {
printf("%lld %lld ", i, i - 1);
}
} else if (k > 1 && k % 2 == 1) {
printf("1 ");
for (ll i = 3; i <= k; i += 2) {
printf("%lld %lld ", i, i - 1);
}
}
if (k < n) {
for (ll i = k + 1; i <= n; i++) {
if (i == n) {
printf("%lld\n",i);
} else {
printf("%lld ", i);
}
}
}
if ( k == n) {
printf("\n");
}
}
return 0;
}