第一行一个整数 n,表示班上人数。接下来 n 行,每行一个字符串表示其名字(互不相同,且只含小写字母,长度不超过 50)。第 n+2 行一个整数 m,表示教练报的名字。接下来 m 行,每行一个字符串表示教练报的名字(只含小写字母,且长度不超过 50)。
对于每个教练报的名字,输出一行。如果该名字正确且是第一次出现,输出“OK”,如果该名字错误,输出“WRONG”,如果该名字正确但不是第一次出现,输出“REPEAT”。(均不加引号)
这道题就是裸的trie,没什么好多说的。。
1 #include2 #include 3 using namespace std; 4 5 const int maxn=55; 6 int n, m; 7 char s[maxn]; 8 struct node{ 9 node *son[26];10 int num;11 }root, *now;12 13 int main(){14 scanf("%d", &n);15 int len;16 for (int i=0; i son[c]==0)24 now->son[c]=new node();25 now=now->son[c];26 }27 }28 scanf("%d", &m);29 bool flag;30 for (int i=0; i son[c]){39 flag=true;40 break;41 }42 now=now->son[c];43 }44 if (flag) { printf("WRONG\n"); continue; }45 if (now->num++) printf("REPEAT\n");46 else printf("OK\n");47 }48 return 0;49 }