1343B. Balanced Array
给你一个正整数 n ,保证 n 是偶数(即能被 2 整除)。你希望构造一个长度为 n 的数组 a ,使得:
- a的前 n/2 个元素是偶数(可被 2 整除);
- a 的第二个n/2 元素为奇数(不能被 2 整除);
- a 的所有元素都是独特的正**;**
- 前一半之和等于后一半之和。
如果有多个答案,您可以打印任意一个。但并不保证答案一定存在。
您必须回答 t个独立的测试案例。
输入
输入的第一行包含一个整数 t ( 1≤t≤104 )。( 1≤t≤104 )–测试用例数。然后是 t 个测试用例。
测试用例的唯一一行包含一个整数 n ( 2≤n≤2⋅105 ) - 数组的长度。保证 n 是偶数(即能被 2 整除)。
保证所有测试用例中 n 的总和不超过 2⋅10^5 ( ∑n≤2⋅10^5 )。
输出
对于每个测试用例,如果没有合适的答案,则在第一行打印 “NO”(不带引号);如果有答案,则在第二行打印 “YES”,并任何满足问题陈述条件的合适数组 a1,a2,…,*an ( 1≤a**i≤10^9 )。
例如
输入
5
2
4
6
8
10
输出
NO
YES
2 4 1 5
NO
YES
2 4 6 8 1 3 5 11
NO
解决方法
// CODEFORCES
// 1343B. Balanced Array
# include<iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
int qi[n/2], ou[n/2];
for(int i = 1; i <= n/2; i++)
{
qi[i] = 2*i - 1;
ou[i] = 2*i;
}
if((n/2)%2 == 1)
{
cout << "NO" << endl;
continue;
}
else
{
cout << "YES" << endl;
for(int i = 1; i <= n/2; i++)
{
cout << ou[i] << ' ';
}
for(int i = 1; i < n/2; i++)
{
cout << qi[i] << ' ';
}
cout << qi[n/2] + n/2 << endl;
}
}
return 0;
}