思路:模板题,贴个模板
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<string>
#include<stack>
#include<set>
#include<map>
#include<vector>
#include<iostream>
#include<algorithm>
#include<sstream>
#define ll long long
const int N=1000000;
const int INF=1e9;
using namespace std;
struct Trie{
int num;
Trie *next[26];
Trie(){
num=0;
for(int i=0;i<26;i++){
next[i]=NULL;
}
}
};
Trie *root=new Trie();
void insert(char *s){
int len=strlen(s);
Trie *p=root;
for(int i=0;i<len;i++){
int v=s[i]-'a';
if(p->next[v]==NULL){ //没有这个前缀,开辟空间
p->next[v]=new Trie();
}
p=p->next[v];
p->num++;
}
}
int query(char *s){
int len=strlen(s);
Trie *p=root;
for(int i=0;i<len;i++){
int v=s[i]-'a';
if(p->next[v]==NULL) return 0;
p=p->next[v];
}
return p->num;
}
int main(){
int c,n,flag;
char s[15];
while(true){
n=0;
while((c=getchar())!='\n'){
s[n++]=c;
flag=0;
}
if(flag) break;
s[n]='\0';
insert(s);
flag=1;
}
while(~scanf("%s",s)){
int ans=query(s);
printf("%d\n",ans);
}
return 0;
}