1 /* 2 * 字典树 3 */ 4 #include <cstdio> 5 #include <cstring> 6 #include <cstdlib> 7 #include <iostream> 8 9 using namespace std; 10 11 const int N = 11; 12 13 bool yes; 14 char str[N]; 15 struct node { 16 bool flag; 17 node *child[10]; 18 node() { 19 flag = false; 20 for (int i=0; i<10; ++i) child[i] = NULL; 21 } 22 }*root; 23 24 void insert(char str[]) { 25 node *p = root; 26 int len = strlen(str); 27 for (int k,i=0; i<len; ++i, p=p->child[k]) { 28 k = str[i] - '0'; 29 if (!p->child[k]) p->child[k] = new node(); 30 else if (i == len-1) {yes = false; return;} 31 if (p->child[k]->flag) {yes = false; return;} 32 } 33 p->flag = true; 34 } 35 36 void del(node *p) {//释放内存 37 for (int i=0; i<10; ++i) { 38 if (p->child[i]) del(p->child[i]); 39 } 40 delete p; 41 p = NULL; 42 } 43 44 int main() { 45 int t; 46 scanf ("%d", &t); 47 while (t--) { 48 int n; 49 scanf ("%d", &n); 50 yes = true; 51 root = new node(); 52 while (n--) { 53 scanf ("%s", str); 54 if (yes) insert(str); 55 } 56 if (yes) puts("YES"); 57 else puts("NO"); 58 del(root); 59 } 60 return 0; 61 }