const int MAXN = 1e5 + 5;
int trie[MAXN][26], cnt[MAXN], tot = 1, n, m;
bool end[MAXN];
char str[MAXN];
void insert(char* str) {
int len = strlen(str), p = 1;
for (int k = 0; k < len; k++) {
int ch = str[k] - ‘a‘;
if (trie[p][ch] == 0) trie[p][ch] = ++tot;
p = trie[p][ch];
}
end[p] = 1;
}
int search(char* str) {
int len = strlen(str), p = 1, sum = 0;
for (int k = 0; k < len; k++) {
p = trie[p][str[k] - ‘a‘];
if (p == 0) return false;
}
return end[p];
}
void insert(int x) {
int p = 1;
for (int i = 30; i >= 0; i--) {
int u = (x >> i) & 1;
if (trie[p][u] == 0) trie[p][u] = ++tot;
p = trie[p][u];
}
end[p] = 1;
}
int search(int x) {
int p = 1, sum = 0;
for (int i = 30; i >= 0; i--) {
int u = (x >> i) & 1;
if (trie[p][u ^ 1]) {
p = trie[p][u ^ 1];
sum += (1 << i);
} else p = trie[p][u];
}
return sum;
}
原文:https://www.cnblogs.com/cqbz-ChenJiage/p/casd.html