voidinsert(string s){
int len = s.length();int p =0;for(int i=0;i<len;i++){
char c = s[i]-'a';if(!Trie[p][c]){
Trie[p][c]= k++;}
p = Trie[p][c];}
color[p]=1;}
查找操作
查找一个单词是否在字典树中,只要找到一条和单词吻合的链,且它的末尾被染色即可
boolsearch(string s){
int len = s.length();int p =0;for(int i=0;i<len;i++){
char c = s[i]-'a';if(!Trie[p][c])returnfalse;
p = Trie[p][c];}return color[p]==1;}
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<iomanip>#include<queue>#include<stack>usingnamespace std;typedeflonglong ll;constint MAXN =2e6+100;int Trie[MAXN][30];int color[MAXN];int k =1;voidinsert(string s){
int len = s.length();int p =0;for(int i=0;i<len;i++){
char c = s[i]-'a';if(!Trie[p][c]){
Trie[p][c]= k++;}
p = Trie[p][c];}
color[p]=1;}
string search(string s){
int len = s.length();int p =0;for(int i=0;i<len;i++){
char c = s[i]-'a';if(!Trie[p][c])return"WRONG";
p = Trie[p][c];}if(color[p]==1){
color[p]=2;return"OK";}elsereturn"REPEAT";}intmain(){
int n,m;
cin>>n;
string s;for(int i=0;i<n;i++){
cin>>s;insert(s);}
cin>>m;for(int i=0;i<m;i++){
cin>>s;
cout<<search(s)<<endl;}return0;}
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<iomanip>#include<queue>#include<stack>
using namespace std;typedeflonglong ll;constint MAXN =2e6+100;int Trie[MAXN][30];int k =1;int color[MAXN];int number[MAXN];voidinsert(string s){
int len = s.length();int p =0;for(int i=0;i<len;i++){
int c = s[i]-'a';if(!Trie[p][c]){
Trie[p][c]= k;
k++;}
number[p]++;
p = Trie[p][c];}
number[p]++;}intsearch(string s){
int p =0;int len = s.length();for(int i=0;i<len;i++){
int c = s[i]-'a';if(!Trie[p][c])return0;
p = Trie[p][c];}return number[p];}intmain(){
string s;while(true){
getline(cin,s);if(s =="")break;insert(s);}while(cin>>s){
cout<<search(s)<<endl;}return0;}