/**
UTix
*/
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int tot,rt;
int flag;
struct node{
int to[26];
int cnt;
}haha[500000];
int build(){
for(int i=0;i<26;i++){
haha[tot].to[i]=-1;
haha[tot].cnt=0;
}
return tot++;
}
void init(){
tot=0;
rt=build();
}
bool insert(char *s){
int cur=rt;
int sz=strlen(s);
for(int i=0;i<sz;i++){
int a=s[i]-'a';
if(haha[cur].to[a]==-1){
haha[cur].to[a]=build();
}
cur=haha[cur].to[a];
haha[cur].cnt++;
}
}
int check(char *s){
int cur=rt;
int sz=strlen(s);
for(int i=0;i<sz;i++){
int a=s[i]-'a';
if(haha[cur].to[a]==-1){
return 0;
}
cur=haha[cur].to[a];
}
return haha[cur].cnt;
}
int main(){
char word[15];
init();
while (gets(word)&&word[0]){
insert(word);
}
while(gets(word)&&word[0]){
printf("%d\n",check(word));
}
return 0;
}
模板积累——字典树建树及查询
最新推荐文章于 2021-07-18 18:24:57 发布