您的位置:首页 > 其它

CF - 359 - B. Permutation(构造)

2013-11-04 01:31 441 查看
题意:输入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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: