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;
}