Codeforces Round #817 (Div. 4)G Even-Odd XOR
Even-Odd XOR
构造
这题对于数字大小的要求非常宽松,意味着会有大量的高位不会被使用到
考虑对于任意的 \(a\), \(b\), 如何异或上一些值,使得 \(a\), \(b\) 相等,显然直接异或上 \(a \oplus b\) 就可以让其相等,
但是 \(a \oplus b\) 可能之前用过,于是考虑利用高位
最后会发现要留下 \(3\) 个空位去调整让其相等,思路就是这样,具体看代码实现
#include <iostream>
#include <cstdio>
#include <string>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
int a = 0, b = 0;
for(int i=1; i<=n-3; i++)
{
if(i & 1 ^ 1) b ^= i;
else a ^= i;
cout << i << " ";
}
int ans1 = a ^ b | (1 << 30) | (1 << 29);
int ans2 = 1 << 30;
int ans3 = 1 << 29;
cout << ans2 << " " << ans1 << " " << ans3 << "\n";
}
return 0;
}