C. Almost Equal
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
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.
Examples
inputCopy
3
outputCopy
YES
1 4 5 2 3 6
inputCopy
4
outputCopy
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.
一开始做的是打表然后交换
发现这样效率更高些
如下:
#include<iostream>
using namespace std;
#define N 100010
long long a[2*N];
long long n,i;
int main()
{
cin>>n;
if(n&2==0)
{
cout<<"NO"<<endl;
return 0;
}
cout<<"YES"<<endl;
for(int i=1;i<=n;i++)
{
if(i%2==1)
{
a[i]=2*i-1;
a[i+n]=2*i;
}
else
{
a[i]=2*i;
a[i+n]=2*i-1;
}
}
for(int i=1;i<=2*n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}