题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251
AC代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstring> 5 #include<queue> 6 #include<string> 7 #include<cmath> 8 using namespace std; 9 char ss[1010][1010]; 10 #define MAX 27 11 struct trie 12 { 13 trie *next[MAX]; 14 int v; 15 trie() 16 { 17 int i; 18 v=0; 19 for(i=0; i<26; i++) next[i]=NULL; 20 } 21 }; 22 trie *p,*q; 23 void creattrie(char *str,trie *root) 24 { 25 int len = strlen(str); 26 p = root; 27 for(int i=0;i<len; i++) 28 { 29 int id = str[i] - 'a'; 30 if(p->next[id] == NULL) 31 { 32 q=new trie; 33 q->v = 1; 34 p->next[id] = q; 35 p=q; 36 } 37 else 38 { 39 p=p->next[id]; 40 p->v+=1; 41 } 42 } 43 } 44 int findtrie(char *str,trie *root) 45 { 46 int i; 47 int len = strlen(str); 48 p = root; 49 for(i=0;i<len;i++) 50 { 51 int id = str[i] - 'a'; 52 p=p->next[id]; 53 if(p->v == 1) 54 { 55 return i+1; 56 } 57 } 58 } 59 int main() 60 { 61 int T,n,ans; 62 scanf("%d",&T); 63 while(T--) 64 { 65 ans = 0; 66 trie *root = new trie; 67 scanf("%d",&n); 68 //getchar(); 69 for(int i=0;i<n;i++) 70 { 71 scanf("%s", ss[i]);//用gets接收错了一天了,晚上才发现 72 creattrie(ss[i],root); 73 } 74 for(int i=0;i<n;i++) 75 { 76 int kk = findtrie(ss[i],root); 77 ans = ans+kk; 78 } 79 printf("%d ",ans); 80 } 81 return 0; 82 }