突然想到一个很机智的做法,mark,插入的时候直接返回最后一个的sz,然后插入完之后判断一下就好啦、
// Created by Chenhongwei in 2015.
// Copyright (c) 2015 Chenhongwei. All rights reserved.
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <climits>
#include <queue>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
const int inf=1e9;
const int maxn=1e5+100;
typedef long long ll;
typedef unsigned long long ull;
int ch[100100][10];
int v[10010],sz,n;
char s[10010][15];
int insert(int x)
{
int u=0,len=strlen(s[x]);
for(int i=0;i<len;i++)
{
int c=s[x][i]-'0';
if(!ch[u][c])
{
memset(ch[sz],0,sizeof ch[sz]);
ch[u][c]=sz++;
}
u=ch[u][c];
}
return u;
}
int main()
{
//ios::sync_with_stdio(false);
// freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int T;
scanf("%d",&T);
while(T--)
{
sz=1;
memset(ch,0,sizeof ch);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",s[i]);
v[i]=insert(i);
}
bool ok=0;
for(int i=1;i<=n;i++)
for(int j=0;j<=9;j++)
if(ch[v[i]][j])
{
ok=1;
break;
}
if(ok)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}