XOR=平均值
每次测试时间限制:1秒
每次测试的内存限制:256 MB
输入:标准输入
输出:标准输出
题目描述
给你一个整数 \(n\) 。找出一个由 \(n\) 个整数 \(a_1, a_2, \dots, a_n\) 组成的序列,使得所有 \(i\) 和 \(1 \leq a_i \leq 10^9\) 都是 \(1 \leq a_i \leq 10^9\) 。
\[a_1 \oplus a_2 \oplus \dots \oplus a_n = \frac{a_1 + a_2 + \dots + a_n}{n}, \]其中 \(\oplus\) 表示 bitwise XOR。
证明存在满足上述所有条件的整数序列。
输入
第一行输入包含 \(t\) ( \(1 \leq t \leq 10^4\) ) - 测试用例数。
每个测试用例的第一行包含一个整数 \(n\) ( \(1 \leq n \leq 10^5\) ) 表示你要查找的序列的长度。
所有测试用例中 \(n\) 的总和不超过 \(10^5\) 。
输出
对于每个测试用例,输出满足语句中条件的 \(a_1, a_2, \dots, a_n\)。
如果有几个可能的答案,您可以输出其中的任何一个。
样例 #1
样例输入 #1
3
1
4
3
样例输出 #1
69
13 2 8 1
7 7 7
提示
在第一个测试用例中, $ 69 = \frac{69}{1} = 69 $ .
在第二个测试用例中, $ 13 \oplus 2 \oplus 8 \oplus 1 = \frac{13 + 2 + 8 + 1}{4} = 6 $ .
题解
怎么还没怎么搞懂,就把答案看完了?
当 n 为奇数时,奇数个相同的数的 异或 就等于它本身,而其平均值也为它本身,因而只需输出 n 个相同的数字即可。
当 n 为偶数时,偶数个相同的数的 异或 是 0 ,而 1 和 3 的 异或 是2。因此,只需输出以下结果
\(1, 3, \underbrace{2, \dots, 2}_{n-2\text{ 个}}\)
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
// 如果n是奇数,则输出n个1
if (n % 2)
{
for (int i = 1; i <= n; i++) printf("1 ");
printf("\n");
}
// 如果n是偶数,则输出1 3 2 2 2 2...
else
{
printf("1 3 ");
for (int i = 2; i < n; i++)printf("2 ");
printf("\n");
}
}
return 0;
}
标签:dots,输出,XOR,平均值,10,leq,测试用例,oplus
From: https://www.cnblogs.com/phuzzz/p/18558425