您的位置:首页 > 其它

hihocoder 1014 Trie树

2017-10-11 21:05 381 查看
题目链接:Trie树

题目大意:给你n个字符串,m次询问,每次去询问给定的字符串是给定的字符串里面中多少个字符串的前缀

题目思路:字典树直接做就好了

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

using namespace std;
const int maxn = 1e6+10;

int le;
struct node{
int Next[26];
int cnt;
void init(){
cnt = 0;
memset(Next,-1,sizeof(Next));
}
}T[maxn];

void Insert(char *s){
int i = 0,p = 0;
while(s[i]){
int x = s[i]-'a';
if(T[p].Next[x] == -1){
T[le].init();
T[p].Next[x] = le++;
}
p = T[p].Next[x];
T[p].cnt++;
i++;
}
}

void query(char *s){
int i = 0,p = 0;
while(s[i]){
int x = s[i]-'a';
if(T[p].Next[x] == -1){
puts("0");
return ;
}
p = T[p].Next[x];
i++;
}
printf("%d\n",T[p].cnt);
}

int main(){
int n,m;
char str[20];
while(~scanf("%d",&n)){
le = 1;
T[0].init();
while(n--){
scanf("%s",str);
Insert(str);
}
scanf("%d",&m);
while(m--){
scanf("%s",str);
query(str);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: