# codeforces 1205A Almost Equal

2019-08-19 16:01:04  阅读：117  来源： 互联网

You are given integer n. You have to arrange numbers from 1 to 2n, using each of them exactly once, on the circle, so that the following condition would be satisfied:

For every n consecutive numbers on the circle write their sum on the blackboard. Then any two of written on the blackboard 2n numbers differ not more than by 1.

For example, choose n=3. On the left you can see an example of a valid arrangement: 1+4+5=10, 4+5+2=11, 5+2+3=10, 2+3+6=11, 3+6+1=10, 6+1+4=11, any two numbers differ by at most 1. On the right you can see an invalid arrangement: for example, 5+1+6=12, and 3+2+4=9, 9 and 12 differ more than by 1. Input
The first and the only line contain one integer n (1≤n≤105).

Output
If there is no solution, output “NO” in the first line.

If there is a solution, output “YES” in the first line. In the second line output 2n numbers — numbers from 1 to 2n in the order they will stay in the circle. Each number should appear only once. If there are several solutions, you can output any of them.

3

YES
1 4 5 2 3 6

4

NO

##### Note

Example from the statement is shown for the first example.
It can be proved that there is no solution in the second example.

##### 题解：

1

2

1的左边从上往下填，1的右边从下往上填。

##### 代码如下：
``````#include <iostream>
#include <cstring>
using namespace std;
int a;
int main(){
int n;
scanf("%d", &n);
int m = 2 * n;
long long r = (1 + m) * m / 2;
if(r % 2 == 0){
printf("NO\n");
return 0;
}
printf("YES\n");
a = 1;
a[n + 1] = 2;
int q = 1, h = n + 2;
a[n + 2] = 3;
a[2 * n] = 2 * n;
int now = 4;
while(q + 2 <= n || h + 2 < 2 * n){
if(q + 2 <= n){
a[++q] = now++;
a[++q] = now++;
}
if(h + 2 < 2 * n){
a[++h] = now++;
a[++h] = now++;
}
}
for(int i = 1; i < 2 * n; i++){
printf("%d ", a[i]);
}
printf("%d\n", a[2 * n]);
return 0;
}
``````