首页 > 试题广场 >

小红的异或构造

[编程题]小红的异或构造
  • 热度指数:260 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}请你构造一个长为 n 的数组 a_1,a_2,\dots,a_n,满足:
\hspace{23pt}\bullet\,数组元素均为小于 10^9 的正整数;
\hspace{23pt}\bullet\,对于任意一对下标 i,j\left( 1 \leqq i,j \leqq n\right),均有 a_i \oplus a_j = i \oplus j 成立。

【名词解释】
\hspace{15pt}按位异或(\oplus:对两个整数的二进制表示按位进行异或运算。

输入描述:
\hspace{15pt}第一行输入一个整数 n\left(1\leqq n \leqq 2 \times 10^5\right)


输出描述:
\hspace{15pt}输出 n 个正整数,代表所构造的数组。
\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

5

输出

7 4 5 2 3
示例2

输入

1

输出

4
头像 Ldh1315109
发表于 2025-11-07 17:18:57
小红的异或构造 令就可以满足条件。 def solve(testcase): print(*[i for i in range(1, II() + 1)]) for testcase in range(1): solve(testcase)
头像 千雪水岷
发表于 2025-11-19 20:57:58
//头文件,也可以使用万能头 #include <iostream> #include <vector> //主程序 int main() { int n = 0; ////n变量主要是看长度 std::cin >> n; // 令a 展开全文
头像 自由的风0450
发表于 2025-11-22 14:46:51
#include <iostream> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin>>n; f 展开全文
头像 lotusor
发表于 2025-12-07 00:03:17
n = int(input()) C = n+1 ans = [C ^ i for i in range(1, n + 1)] print(' '.join(map(str, ans))) 本题需要用到异或的数学性质,不难发现本题的构造可以改写为ai异或i = aj 异或j,这就表明数列的所有异或结 展开全文
头像 牛客用户098471297
发表于 2025-12-05 10:59:13
#include<bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define quick ios::sync_with_stdio(false);cin.tie(0);cout.t 展开全文