静态建树,空间开大点,动态会超时,其他没什么好说的。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int T[100000][10];
int v[100000][10];
int sz;
bool a;
void init()
{
memset(T[0],0,sizeof(T[0]));
memset(v,0,sizeof(v));
sz=1;
a=1;
}
int idx(char c)
{
return c-'0';
}
void insert(char * s)
{
int l=strlen(s);
int u=0,t;
for (int i=0;i<l;i++)
{
t=idx(s[i]);
if (T[u][t]==0)
{
memset(T[sz],0,sizeof(T[sz]));
T[u][t]=sz++;
}
u=T[u][t];
if (v[u][t]==1)
a=0;
}
if (T[u][t]!=0)
a=0;
v[u][t]=1;
}
int main()
{
int r;
cin>>r;
while (r--)
{
int n;
init();
cin>>n;
char s[15];
for (int i=1;i<=n;i++)
{
scanf("%s",s);
insert(s);
}
if (a)
printf("YES\n");
else
printf("NO\n");
}
}