Loading

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;
}
posted @ 2022-08-31 08:58  dgsvygd  阅读(149)  评论(0编辑  收藏  举报