一开始数组开小了,,就判断下当前字符是不是前面字符的前缀和前面字符是不是当前字符的前缀即可
int t = 0,son[MAXN][10];
map<int,int>mp;
bool build_trie(string x)
{
int l= (int)x.size(), p = 0;
int flag=0,flag2=1;
for (int i = 0; i < l; ++i)
{
if (son[p][x[i] - '0'] == 0)
{
son[p][x[i] - '0'] = ++t;
flag2=0;
}
p = son[p][x[i] - '0'];
if(mp[p]) flag=1;
}
mp[p]=1;
return (flag|flag2);
}
bool solve()
{
t=0;
int n;cin>>n;
memset(son,0,sizeof(son));mp.clear();
int tag=0;
rpp(i,n)
{
string s;cin>>s;
tag|=(build_trie(s));
}
return !tag;
}
signed main()
{
fast;
int T;cin>>T;
rpp(_,T)
{
if(solve()) printf("Case #%d: Yes\n",_);
else printf("Case #%d: No\n",_);
}
return 0;
}