文章目录
一、Balanced Array
总结
一、Balanced Array
本题链接: Balanced Array
题目:
B. Balanced Array
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given a positive integer n, it is guaranteed that n is even (i.e. divisible by 2).
You want to construct the array a of length n such that:
The first n2 elements of a are even (divisible by 2);
the second n2 elements of a are odd (not divisible by 2);
all elements of a are distinct and positive;
the sum of the first half equals to the sum of the second half (∑i=1n2ai=∑i=n2+1nai).
If there are multiple answers, you can print any. It is not guaranteed that the answer exists.
You have to answer t independent test cases.
Input
The first line of the input contains one integer t (1≤t≤104) — the number of test cases. Then t test cases follow.
The only line of the test case contains one integer n (2≤n≤2⋅105) — the length of the array. It is guaranteed that that n is even (i.e. divisible by 2).
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105 (∑n≤2⋅105).
Output
For each test case, print the answer — “NO” (without quotes), if there is no suitable answer for the given test case or “YES” in the first line and any suitable array a1,a2,…,an (1≤ai≤109) satisfying conditions from the problem statement on the second line.
Example
input
5
2
4
6
8
10
output
NO
YES
2 4 1 5
NO
YES
2 4 6 8 1 3 5 11
NO
本博客给出本题截图:
题意:题中要求实现这么一种数列,要求前n / 2
项的和与后n / 2
项的和相等,并且要求对于第n / 2
个元素和第n / 4
个元素要求是偶数,如果存在这么一种数组,则输出YES
并输出数组中的所有元素的值 (答案不唯一),如果不存在这样的数组,则输出NO
AC代码
#include <iostream> using namespace std; int main() { int n; cin >> n; while (n -- ) { int m; cin >> m; if (m % 2 == 0 && m % 4 != 0) { puts("NO"); continue; } puts("YES"); int res1 = 0, res2 = 0; for (int i = 0; i < m / 2; i ++ ) { int t = (i + 1) * 2; cout << t << ' '; res1 += t; } for (int i = 0; i < m / 2 - 1; i ++ ) { int t = i * 2 + 1; cout << t << ' '; res2 += t; } cout << res1 - res2 << endl; } return 0; }
总结
水题,不解释