#include <bits/stdc++.h>
using namespace std;
int t,n;
int main(){
cin>>t;
while(t--){
cin>>n;
if(n%4!=0){
cout<<"NO"<<endl;
continue;
}else{
cout<<"YES"<<endl;
}
int m=n/2,arr[200005];//前半段
for(int i=0;i<m;i++){
arr[i]=2*(i+1);
}
int num=m*(m+1),sum=0;//后半段
for(int i=0;i<m-1;i++){
arr[m+i]=2*i+1;
sum+=arr[m+i];
}
arr[n-1]=num-sum;
for(int i=0;i<n;i++){
cout<<arr[i]<<' ';
}
cout<<endl;
}
}
从压样例中可以看出n不是四的倍数的话,输出no,是4的倍数的话就是输出yes,算出数组的一半,左半部分为二的倍数,用arr存储,算出左半总合,右半部分为基数,1,3,5,7,9...题目说左半部分的总和等于右半部分总和,所以我们只需要修改右半部分最后一个数即可,最后一次输出。

京公网安备 11010502036488号