hdu 1671 字典树
来源:互联网 发布:淘宝客哪个软件好 编辑:程序博客网 时间:2024/06/05 15:34
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>struct Trie{ int num; Trie *next[10];}root;void createTrie(char *str){ int len = strlen(str); Trie *p = &root, *q; for(int i = 0; i < len; i++) { int id = str[i] - '0'; if(p->next[id] == NULL) { q = new Trie; q->num = 1; for(int j = 0; j < 10; j++) q->next[j] = NULL; p->next[id] = q; p = p->next[id]; } else { p->next[id]->num++; p = p->next[id]; } }}int findTrie(char *str){ int len = strlen(str); Trie *p = &root; for(int i = 0; i < len; i++) { int id = str[i] - '0'; p = p->next[id]; } return p->num;}void Free(Trie *p){ for(int i = 0; i < 10; i++) if(p->next[i]) Free(p->next[i]); delete p;}int main(){ int t; scanf("%d", &t); while(t--) { int n; char str[10010][15]; scanf("%d", &n); for(int i = 0; i < 10; i++) root.next[i] = NULL; for(int i = 0; i < n; i++) { scanf("%s", str[i]); createTrie(str[i]); } int ans; for(int i = 0; i < n; i++) { ans = findTrie(str[i]); if(ans > 1) { printf("NO\n"); break; } } if(ans == 1) printf("YES\n"); for(int i = 0; i < 10; i++) if(root.next[i]) Free(root.next[i]); }}