字典树
字典树
1、用途:用于处理一些字符串匹配,或任意两数异或最大值,等等...
1、模版:洛谷P8306。
template<typename T>
struct Z_tree{
int n, tot;
vector<T> cnt;
vector<array<int, 2>> tree;
Z_tree(int n_) : cnt(n_ << 5), tree(n_ << 5) {
n = n_;
tot = 0;
}
inline void insert(int x) {
int p = 0;
for (int i = 30; i >= 0; i--) {
int u = x >> i & 1;
if (!tree[p][u]) {
tree[p][u] = ++tot;
}
p = tree[p][u];
cnt[p]++;
}
}
inline int find(int x) {
int p = 0;
int res = 0;
for (int i = 30; i >= 0; i--) {
int u = x >> i & 1;
if (tree[p][u ^ 1]) {
res += (1 << i);
p = tree[p][u ^ 1];
} else {
p = tree[p][u];
}
}
return res;
}
};
3、稍微进阶题(个人认为比较有意思):CF。

浙公网安备 33010602011771号