Codeforces Round #580 (Div. 2) C- Almost Equal【规律】
题目:
http://codeforces.com/contest/1206/problem/C
大致题意:
输入n,把数字1~2n 排成一个圈,使得任意两个“连续n个数字之和”的差值都不超过1。
思路:
猜到 n = 偶数 时都是无解的,直接输出NO。
n = 奇数 的时候,1 和 2 的位置是确定的,1 往后 n-1 个数字,第偶数个是前一个数+3,第奇数个是前一个数+1。2 往后 n-1 个数字,第偶数个是前一个数+1,第奇数个是前一个数+3。
代码:
#include<iostream>
#include<string.h>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main() {
int n;
scanf("%d",&n);
if(n % 2 == 0) {
printf("NO\n");
}
else {
printf("YES\n");
printf("1");
int num = 1;
for(int i = 0; i < n-1; i++) {
if(i % 2 == 0) {
printf(" %d",num+3);
num += 3;
}
else {
printf(" %d",num+1);
num += 1;
}
}
printf(" 2");
num = 2;
for(int i = 0; i < n-1; i++) {
if(i % 2 == 0) {
printf(" %d",num+1);
num += 1;
}
else {
printf(" %d",num+3);
num += 3;
}
}
printf("\n");
}
return 0;
}