map代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<string,int>a;
string s;
int n,m;
int main(){
cin>>n;
while(n--){
cin>>s;
a[s]=1;
}
cin>>m;
while(m--){
cin>>s;
if(a[s]==1){
puts("OK");
a[s]=2;
}
else if(a[s]==2) puts("REPEAT");
else puts("WRONG");
}
return 0;
}
字典树代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
int cnt;
int son[26];
bool have;
node(){
cnt=0;
memset(son,false,sizeof son);
have=false;
}
}trie[800000];
int num=0;
void insert(char *s){
int v,len=strlen(s);
int u=0;
for(int i=0;i<len;i++){
v=s[i]-'a';
if(!trie[u].son[v])
trie[u].son[v]=++num
;
u=trie[u].son[v];
}
trie[u].have=1;
}
int find(char *s){
int v,u=0,len=strlen(s);
for(int i=0;i<len;i++){
v=s[i]-'a';
if(!trie[u].son[v])return 3;
u=trie[u].son[v];
}
if(!trie[u].have)return 3;
if(!trie[u].cnt){
trie[u].cnt++;
return 1;
}
return 2;
}
int main(){
char name[100];
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%s",name);
insert(name);
}
scanf("%d",&m);
for(int i=1;i<=m;++i){
scanf("%s",name);
int p=find(name);
if(p==1)
puts("OK");
else if(p==2)
puts("REPEAT");
else if(p==3)
puts("WRONG");
}
return 0;
}