同poj 1059,判断是否为前缀。
1 #include2 #include 3 const int N = 100000; 4 int next[N][10],cnt=0; 5 bool f=1,end[N],vis[N]; 6 void inst(char *s) 7 { 8 int u=0,p; 9 for(;*s;s++)10 {11 p = *s - '0';12 if(end[u])13 {f = 0; return ;}14 if(!next[u][p])15 {16 cnt++;17 memset(next[cnt],0,sizeof next[0]);18 next[u][p] = cnt;19 vis[u] = 1;20 }21 u = next[u][p];22 }23 end[u] = 1;24 if(vis[u]) f = 0;25 }26 int main()27 {28 char t[12];29 int n,m;30 scanf("%d",&n);31 while(n--)32 {33 scanf("%d",&m);34 while(m--)35 {36 scanf("%s",t);37 if(f) inst(t);38 }39 printf("%s\n",f ?"YES" :"NO");40 f = 1; cnt = 0;41 memset(next[0],0,sizeof next[0]);42 memset(end,0,sizeof end);43 memset(vis,0,sizeof end);44 }45 return 0;46 }