Light OJ 1129
详细: view
#include<cstdio>
#include<cstring>
using namespace std;
bool ok;
int ch[100010][10];
int val[100010];
int ord;
char ss[10005][15];
void init()
{
memset(ch[0],0,sizeof(ch[0]));
ord=1;
memset(val,0,sizeof(val));
ok=1;
}
inline int id(char c)
{
return c-'0';
}
void _insert(char s[])
{
int u=0,len=strlen(s);
for(int i=0;i<len;i++)
{
int j=id(s[i]);
if(!ch[u][j]){
memset(ch[ord],0,sizeof(ch[ord]));
val[ord]=0;
ch[u][j]=ord++;
}
u=ch[u][j];
if(val[u]) ok=0;
}
val[u]=1;
}
bool work1(int n)
{
init();
for(int i=0;i<n;i++){
if(!ok) continue;
_insert(ss[i]);
}
return ok;
}
bool work2(int n)
{
init();
for(int i=n-1;i>=0;i--){
if(!ok) continue;
_insert(ss[i]);
}
return ok;
}
int main()
{
//freopen("in.txt","r",stdin);
int T,ca=0;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%s",ss[i]);
printf("Case %d: ",++ca);
if(work1(n)&&work2(n)) puts("YES");
else puts("NO");
}
return 0;
}