题目链接:Prefix Sums
题目解析:将原序列分成A,B两个长度一样的序列,要求A,B两个序列的前缀和不同,并且A,B两个序列中的元素和相等
(为保证其前缀和不同,可对A,B序列中的元素进行排序处理)
【构造】
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
int n;
cin>>t;
while(t--)
{
cin>>n;
if(n%4!=0) //n%2%2
{
cout<<"NO"<<endl;
}
else
{
cout<<"YES"<<endl;
// for(int i=0;i<n/4;i++)
// {
// int l=1;
// int r=n;
// cout<<l+i<<" "<<r-i<<" ";
// }
// cout<<endl;
for(int i=0;i<n/4;i++)//A序列的前一半
{
int l=1;
int r=n;
cout<<l+i<<" ";
}
for(int i=n/4;i>0;i--)//A序列的后一半
{
int l=1;
int r=n;
cout<<r-i+1<<" ";//r-(i-1)
}
cout<<endl;
for(int i=0;i<n/4;i++)//B序列的前一半
{
int l=1+n/4;
int r=n-n/4;
cout<<l+i<<" ";
}
for(int i=n/4;i>0;i--)//B序列的后一半
{
int l=1+n/4;
int r=n-n/4;
cout<<r-i+1<<" ";
}
cout<<endl;
}
}
return 0;
}