[原题链接]((30条消息) POJ-2315 Colored Sticks_right_135的博客-CSDN博客)
题解:
将电话字符依次插入到字典树中,若在过程中碰到有字符串的结尾或者结束时仍有字符串尚未结束,都说明该字符树不符合要求,否则符合要求。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int trie[100010][30];
bool end[100010];
int tot;
char s[30];
void init() {
tot=1;
memset(end,0,sizeof(end));
memset(trie,0,sizeof(trie));
}
bool insert(char* s) {
int l=strlen(s);
int p=1;
int o=tot;
bool f=0;
for(int i=0; i<l; i++) {
int t=s[i]-'0';
if(!trie[p][t]) {
trie[p][t]=++tot;
}else if(i==l-1){//**思维
return 1;
}
if(end[p]==1) {
return 1;
}
p=trie[p][t];
}
end[p]=1;
return f;
}
int main() {
int t;
cin>>t;
while(t--) {
bool f=0;
cin>>n;
init();
while(n--) {
scanf("%s",s);
if(!f) {
f=insert(s);
}
}
if(f) {
cout<<"NO"<<endl;
} else {
cout<<"YES"<<endl;
}
}
}