给出n和x,构造一个最长的数组a,使得a的任意子数组的异或和不为0或x。a的元素值$1 \le a_i<2^n$
$ 1 \le n \le 18, 1 \le x < 2^18$
">Ehab and the Expected XOR Problem
Ehab and the Expected XOR Problem
Created by LXC on Thu Aug 17 15:15:39 2023
https://codeforces.com/problemset/problem/1174/D
ranting: 1900
tag: bitmasks, constructive algorithms
problem
给出n和x,构造一个最长的数组a,使得a的任意子数组的异或和不为0或x。a的元素值$1 \le a_i<2^n$
$ 1 \le n \le 18, 1 \le x < 2^18$
solution
考虑合法的a数组的前缀异或和数组b。
b的每个元素不能相同,否则两个前缀的异或就是区间的异或,当两个前缀异或和相等则区间异或和为0.
b的任意两个元素异或不能等于x。
我们可以构造出b,然后构造出a。
对于构造b的方法,我们可以遍历1到$2^n$内的数选择一些作为b的元素。遍历保证了b的每个元素不相等。
然后对于当前遍历元素i,如果$i\oplus x$已经是b的元素,那么则i不能作为b的元素。这可以用哈希表实现。
$i$和$i\oplus x$两者独立,任选一个不会影响答案。
code
1 |
|