cf round 863 B
XOR = Average
题目
https://codeforces.com/contest/1758/problem/B
主要意思
给定一整数n,要使 n个数的异或
= n个数之和的平均值
,输出这n个数
思路
n是奇数的时候
n 个相同的数 ( 设为a ) 的异或也为a , n 个 a 之和的平均值也为 a
n为偶数的时候
n个相同的数(设为a) 的异或为0, 所以要转换成奇数个相同的数,这样异或的结果才是a ,但是要让这些数之和的平均值也为a,就要让 被转换的两个数之和的异或 = (两个数之和) / 2
,这样平均值就是这个异或。最小的满足这个条件的两个数就是1和3(1和2的异或是3,(1 + 2) / 2 != 3故不符合)
1 3 2 2 ....
代码
#include <iostream>
using namespace std;
int main()
{
int t; cin >> t;
while(t--)
{
int n; cin >> n;
if(n & 1) //n为奇数
while(n--) cout << 1 << ' ';
else //n为偶数
{
cout << 1 << ' ' << 3 << ' ';
int num = n - 2;
while(num--) cout << 2 << ' ';
}
cout << endl;
}
}