题目链接:https://codeforces.com/contest/1343/problem/B
读题,长度为 n 的数组分成前一半和后一半,要求元素互不相同,并且前一半偶数的和等于后一半奇数的和,说明 n 必须能整除4.
构造则是前一半 2、4、6…,后一半1、3、5…,右边留一个位置,用来放一个奇数使两边之和相等。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
if(n % 4 != 0) {
cout << "NO" << endl;
} else {
cout << "YES" << endl;
int sum1 = 0, sum2 = 0;
for(int i = 0; i < n / 2; i++) {
cout << 2 * (i + 1) << " ";
sum1 += 2 * (i + 1);
}
for(int i = 0; i < n / 2 - 1; i++) {
cout << 2 * (i + 1) - 1 << " ";
sum2 += 2 * (i + 1) - 1;
}
cout << sum1 - sum2 << endl;
}
}
return 0;
}