题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1251
字典树模板题,唯一需要注意的就是空行的处理..
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
char ch[15]; //接受输入
int num;
struct Node{
int count;
Node *next[26];
Node(){
count = 0;
for(int i = 0;i < 26;i++)
next[i] = NULL;
}
}*root;
/**
*建字典树
*/
void Build(char ch[]){
Node *p = root; //当前位置
int len = strlen(ch);
int k; //next数组下标
for(int i = 0;i < len;i++){
k = ch[i] - 'a';
if(p->next[k] == NULL){
p->next[k] = new Node();
}
p = p->next[k];
p->count++;
}
}
/**
*查询
*/
int Query(char ch[]){
Node *p = root;
int len = strlen(ch);
int k;
for(int i = 0;i < len;i++){
k = ch[i] - 'a';
if(p->next[k] == NULL) //不存在查询的单词
return 0;
p = p->next[k];
}
return p->count;
}
int main(){
root = new Node();
char t;
while(1) {
cin.getline(ch,12); //用来处理空行
if(strlen(ch) == 0)
break;
Build(ch);
}
char q[12];
while(scanf("%s",q) != EOF){
printf("%d\n",Query(q));
}
return 0;
}