trie的简单应用
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=10000*10+10; int trie[maxn][11]; int val[maxn],tot; char str[10000+10][15]; int Insert(char *s) { int len=strlen(s); int i,u=0,loc; for(i=0;i<len;i++) { loc=s[i]-'0'; if(trie[u][loc]) { u=trie[u][loc]; if(val[u]) return 1; } else { trie[u][loc]=tot++; u=trie[u][loc]; memset(trie[tot-1],0,sizeof(trie[tot-1])); } } val[u]=1; for(i=0;i<10;i++) if(trie[u][i]) return 1; return 0; } int main() { int t; cin>>t; while(t--) { int n,i; cin>>n; memset(val,0,sizeof(val)); memset(trie[0],0,sizeof(trie[0])); tot=1; for(i=0;i<n;i++) scanf("%s",str[i]); for(i=0;i<n;i++) if(Insert(str[i])) break; if(i==n) printf("YES\n"); else printf("NO\n"); } return 0; }