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;
	}
}
posted @ 2024-11-20 17:35  PeachyGalaxy  阅读(5)  评论(0编辑  收藏  举报