#include"iostream"
#include"cstdio"
using namespace std;
const int maxn=100000+10; //数组开大点
struct trie
{
int val[maxn];
int ch[maxn][10];
int sz;
trie()
{
sz=1;
memset(ch[0],0,sizeof(ch[0]));
}
int idx(char c)
{
return c-'0';
}
void insert(char *s,int v)
{
int u=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
{
memset(ch[sz],0,sizeof(ch[sz]));
val[sz]=0;
ch[u][c]=sz++;
}
u=ch[u][c];
}
val[u]=v;
}
int search(char *s)
{
int u=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(ch[u][c])
u=ch[u][c];
else
return 0;
}
return val[u];
}
};
int main()
{
//freopen("a.txt","r",stdin);
int t;
cin>>t;
while(t--)
{
int n;
trie b;
cin>>n;
char a[maxn][15];
for(int i=0;i<n;i++)
{
cin>>a[i];
b.insert(a[i],1);
}
int flag=1;
char str[15];
for(int i=0;i<n&&flag;i++)
{
int len=strlen(a[i]);
for(int j=1;j<len;j++)
{
strncpy(str,a[i],j);
str[j]='\0';
if(b.search(str))
flag=0;
}
}
if(flag)
cout<<"YES\n";
else
cout<<"NO\n";
}
return 0;
}
POJ3630 静态建立trie
最新推荐文章于 2020-09-30 11:03:47 发布