原题链接
排列为1~2n升序时,k = 0,
每交换1次a[2i], a[2i - 1], k += 2,
由于0 <= 2k <= n,所以最多交换不超过n/2次,因此第二个绝对值里的数不会变为负数,正确性显然,
该操作等价于将k + 1提到排列最前,
代码如下:
#include <cstdio>
using namespace std;
int n, k;
int main() {
scanf("%d%d", &n, &k);
printf("%d ", k + 1);
for (int i = 1; i <= k; ++i) printf("%d ", i);
for (int i = k + 2; i <= (n << 1); ++i) printf("%d ", i);
}