new会超时。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <map>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct node
{
bool flag;
int next[10];
}R[500005];
char str[10005][15];
int length[10005];
bool flag;
int counter;
void insert(int ii)
{
int index=0;
int i;
for (i=0;i<length[ii];i++)
{
if (R[index].next[str[ii][i]-'0']==0)
{
R[counter+1].flag=false;
memset(R[counter+1].next,0,sizeof(R[counter+1].next));
R[index].next[str[ii][i]-'0']=++counter;
}
index=R[index].next[str[ii][i]-'0'];
}
R[index].flag=true;
}
void check(int ii)
{
int i;
int index=0;
for (i=0;i<length[ii];i++)
{
if (R[index].flag)
{
flag=false;
break;
}
index=R[index].next[str[ii][i]-'0'];
}
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int n;
scanf("%d",&n);
int i;
counter=0;
R[0].flag=false;
memset(R[0].next,0,sizeof(R[0].next));
flag=true;
for (i=0;i<n;i++)
{
scanf("%s",str[i]);
length[i]=strlen(str[i]);
insert(i);
}
for (i=0;i<n;i++)
{
if (flag)
check(i);
}
if (flag)
printf("YES\n");
else
printf("NO\n");
}
}