一、题目
1、题目描述
2、输入输出
2.1输入
2.2输出
3、原题链接
Problem - 862C - Codeforces
二、解题报告
1、思路分析
非常松的一道构造题目
我们只需让最终的异或和为x即可
下面给出个人一种构造方式:
先选1~N-3,然后令o = (1 << 17) ^ 1^2^3...^(N-3), w = (1 << 18) ^ o, z = x ^ w
这样除了x,其余所有数的贡献都被异或掉了
2、复杂度
时间复杂度: O(N)空间复杂度:O(N)
3、代码详解
#include <bits/stdc++.h>
using PII = std::pair<int, int>;
using i64 = long long;const int inf = 1e9;void solve() {int N, x;std::cin >> N >> x;if (N == 1) {std::cout << "YES\n" << x;return;}else if(N == 2) {if (x) {std::cout << "YES\n" << 0 << ' ' << x;return;}std::cout << "NO";return;}std::cout << "YES\n";int pre = 0, o = 1 << 17, w = 1 << 18;for (int i = 1; i <= N - 3; i ++ ) std::cout << i << ' ', pre ^= i;std::cout << (o ^ pre) << ' ' << (w ^ o) << ' ' << (x ^ w);
}int main () {std::ios::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0);int _ = 1;// std::cin >> _;while (_ --)solve();return 0;
}