由于前n/2个数为偶数,后n/2个数为奇数,且数不能重复,
我们不难发现2 6 10 14这类数组大小为奇数*2 的数组无论如何都无法构建符合条件的数组。
对于构造符合条件的数组,我们可以将前面偶数部分按顺序排列出来,后面的奇数部分排列到最后一个数之前。
最后一个数用 偶数和减去已排列的奇数和 得出,由于奇偶性质,最后的结果一定为奇数。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int t,n;
cin>>t;
while(t--){
cin>>n;
if(n/2%2==1){
cout<<"NO\n";
continue;
}
int s = n/2,l=0,r=0;
vector<int> v(n);
for(int i=0;i<s;++i){
v[i]=2*(i+1);
l+=v[i];
}
for(int i=s;i<n-1;++i){
v[i]=2*(i-s+1)-1;
r+=v[i];
}
v[n-1]=l-r;
cout<<"YES\n";
for(int i=0;i<n;++i) cout<<v[i]<<" \n"[i==n-1];
}
}

京公网安备 11010502036488号