判断一组字符串中是否有前缀字符串
#include<stdio.h>
#include<string.h>
#define MAXN 100005
int flag;
struct trie
{
int ch[MAXN][10];
int val[MAXN];
int sz;
void ini() {sz=1;memset(ch[0],0,sizeof(ch[0]));}
int get_id(char c){return c-'0';}
void inert(char *s)
{
int len=strlen(s),pre=0,next;
int tag=0;
for(int i=0;i<len;i++)
{
next=get_id(s[i]);
if(!ch[pre][next])
{
tag=1;
memset(ch[sz],0,sizeof(ch[sz]));
val[sz]=0;
ch[pre][next]=sz++;
}
if(val[ch[pre][next]])
{
flag=0;
return ;
}
pre=ch[pre][next];
}
val[pre]=1;
if(!tag)
{
flag=0;
return ;
}
}
};
char s[12];
trie t;
int main()
{
int cas,n;
scanf("%d",&cas);
while(cas--)
{
t.ini();
flag=1;
scanf("%d",&n);
while(n--)
{
scanf("%s",s);
t.inert(s);
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}