CODEFORCES --- 1343B. Balanced Array

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;
 } 
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值