很明显是一道裸的字典树,但是好久不刷,我忘了。。。
这种情况还是在看一下比较好。
大概看了下,自己写的,插入的时候直接查找,找到就return0
#include <iostream>
#include <queue>
#include <iomanip>
#include <vector>
#include <queue>
#include <map>
#include <stack>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <set>
#include <sstream>
#include <cstring>
using namespace std;
struct trie
{
int ch[100001][11];
int val[100001];
int sz;
void init()
{
sz=0;
memset(ch,0,sizeof(ch));
memset(val,0,sizeof(val));
}
int insert_str(string str)
{
int u=0;
for(int i=0;i<str.size();i++)
{
int index=str[i]-'0';
if(!ch[u][index])
{
ch[u][index]=++sz;
memset(ch[sz],0,sizeof(ch[sz]));
}
else
{
if(val[ch[u][index]])
return 0;
if(i==str.size()-1)
return 0;
}
u=ch[u][index];
}
val[u]=1;
return 1;
}
};
trie T;
int main()
{
int t;
cin>>t;
for(int i=1;i<=t;i++)
{
int n;
cin>>n;
T.init();
string str;
vector<string> V;
for(int j=1;j<=n;j++)
{
cin>>str;
V.push_back(str);
}
int flag=0;
for(int j=0;j<V.size();j++)
{
if(T.insert_str(V[j])==0)
{
flag=1;
break;
}
}
if(flag)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
return 0;
}