#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
struct Dictree
{
bool in;
struct Dictree *next[10];
}node[1000000];
Dictree root;
int cmp(const void *a,const void *b)
{
char *p1,*p2;
p1=(char *)a;
p2=(char *)b;
return strlen(p1)-strlen(p2);
}
int tot;
char s[10005][12];
bool reflect;
void create_tree();
void insert(char *);
int main()
{
int cas,n,i;
for(scanf("%d",&cas);cas;cas--)
{
reflect=false;
create_tree();
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",s[i]);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++)
if(!reflect) insert(s[i]);
if(reflect) printf("NO\n");
else printf("YES\n");
}
return 0;
}
void create_tree()
{
root.in=false;
tot=0;
memset(root.next,NULL,sizeof(root.next));
}
void insert(char *s)
{
int i;
struct Dictree *p;
p=&root;
for(i=0;s[i];i++)
{
if(p->next[s[i]-'0']==NULL)
{
node[tot].in=false;
memset(node[tot].next,NULL,sizeof(node[tot].next));
p->next[s[i]-'0']=&node[tot++];
}
p=p->next[s[i]-'0'];
if(p->in) reflect=true;
}
p->in=true;
}
poj 3060
最新推荐文章于 2017-07-22 18:42:42 发布