原题:https://codeforces.com/contest/1343/problem/B
官方题解:https://codeforces.com/blog/entry/76352
题意:t组测试样例,输入n,表示一共输出n个数,前n/2个为偶数,后n/2个为奇数,要求奇数之和与偶数之和相等。
首先n必须是4的倍数,不然奇数之和必为奇数,直接输出NO。测试样例中可以看出偶数组是常规的递加关系,奇数组前(n/2-1)也是递加关系,最后一个可以看成偶数组之和减去奇数组前(n/2-1)个数之和。
#include <bits/stdc++.h>
using namespace std;
int t,n,a[200010],b[200010],sum,s;
void ans(int x)
{sum=0;
s=0;
for(int i=0; i<x/2; i++)
{
a[i]=(i+1)*2;
sum=sum+a[i];
}
for(int i=0; i<x/2-1; i++)
{
b[i]=(i+1)*2-1;
s=s+b[i];
}
b[x/2]=sum-s;
}
int main()
{
cin>>t;
for(int i=0; i<t; i++)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>n;
if(n%4!=0)
cout<<"NO"<<endl;
else
{
cout<<"YES"<<endl;
ans(n);
for(int i=0; i<n/2; i++)
cout<<a[i]<<' ';
for(int i=0; i<n/2-1; i++)
cout<<b[i]<<' ';
cout<<b[n/2]<<endl;
}
}
}