【POJ】3630 Phone List

时间:2023-03-09 03:18:42
【POJ】3630 Phone List

静态字典树。

 #include <cstdio>
#include <cstring>
#include <cstdlib> #define MAXN 10005 typedef struct Trie {
bool v;
Trie *next[];
Trie() {
v = false;
for (int i=; i<; ++i)
next[i] = NULL;
}
} Trie; Trie tries[MAXN*];
int num; bool create(char str[]) {
int i = , id;
Trie *p = tries;
bool ret = false; while (str[i]) {
id = str[i] - '';
++i;
if (p->next[id] == NULL) {
p->next[id] = &tries[num];
++num;
ret = true;
} else {
if (p->next[id]->v == true)
return false;
}
p = p->next[id];
}
p->v = true;
return ret;
} int main() {
int case_n, n;
char buf[];
bool f; scanf("%d", &case_n); while (case_n--) {
scanf("%d", &n);
f = true;
num = ;
while (n--) {
scanf("%s", buf);
if (f)
f = create(buf);
}
if (f) printf("YES\n");
else printf("NO\n");
for (int i=; i<num; ++i) {
tries[i].v = false;
memset(tries[i].next, , sizeof(tries[i].next));
}
} return ;
}