题意:输入n和k,求一个1到2*n的排列,使得|a1 - a2| + |a3 - a4| + ... + |a2n-1 - a2n| - |a1-a2 + a3-a4 + ... + a2n-1-a2n| = 2 * k(1 ≤ n ≤ 50000, 0 ≤ 2k ≤ n)。。。
题目链接:http://codeforces.com/problemset/problem/359/B
——>>构造,若能出现k对2,剩下的为0,就行了。。。
#include <cstdio>
using namespace std;
int main()
{
int n, k;
while(scanf("%d%d", &n, &k) == 2) {
printf("1 2");
if(k) {
for(int i = 2; i <= k; i++) printf(" %d %d", (i<<1)-1, i<<1);
for(int i = k+1; i <= n; i++) printf(" %d %d", i<<1, (i<<1)-1);
}
else {
for(int i = 2; i <= n; i++) printf(" %d %d", (i<<1)-1, i<<1);
}
puts("");
}
return 0;
}