算法
(构造) $O(n)$
令前一项等于后一项 $+1$,则原式为 $n-n=0$
交换一项,则前面的和式不变,后面的和式 $-2$,所以交换 $k$ 对即可。
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> a(2 * n + 1);
for (int i = 1; i <= 2 * n; ++i) a[i] = 2 * n + 1 -i;
for (int i = 1; k && i <= 2 * n; i += 2) {
swap(a[i], a[i + 1]);
k--;
}
for (int i = 1; i <= 2 * n; ++i) cout << a[i] << " \n"[i == 2 * n];
return 0;
}