Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d7dbc06

Browse files
Create Readme.md
1 parent dcf5645 commit d7dbc06

File tree

1 file changed

+22
-0
lines changed
  • Math/3681.Maximum-XOR-of-Subsequences

1 file changed

+22
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
### 3681.Maximum-XOR-of-Subsequences
2+
3+
这是一道"异或空间线性基"的模版题。
4+
5+
首先定义"异或空间线性基"。对于一组数字集合nums,任意选取若干进行异或操作所能构成的结果记作空间S。如果另一组数字Basis同样也能构成S,并且Basis所需的数字最少,那么Basis就成为原数字集合的一组"异或空间线性基"。举个例子,比如nums={9,11,12,14},它所能构成的异或空间S={2,5,7,9,11,12,14}. 通过某种算法,我们可以找到一组线性基B={12,5,2},并且可以验证B能构造的异或空间也是S。另外,我们所构造的线性基有一个特点,每个元素的leading one的位置都不相同。比如{12,5,2},其二进制表达就是{1100,0101,0010},可以观察到最高位的位置依次降低。
6+
7+
假设我们能找到nums的一组线性基B,那么nums能组成的最大异或值,等价于其线性基B能组成的最大异或值。而对于B,由于有前述的性质(最高位的位置依次降低),我们可以用贪心法来从大到小进行选择:第i个元素的选择取决于答案的第i个bit位是否会退化。
8+
```cpp
9+
int ret = 0;
10+
for (int b: basis) {
11+
ret = max(ret, ret^b);
12+
}
13+
```
14+
15+
接下来我们学习如何构造这样的异或空间线性基。举个例子:a=2, b=5, c=11, d=6
16+
```
17+
3 2 1 0
18+
a
19+
b
20+
c
21+
d
22+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /