# 统计难题 HDU – 1251（迷之测试数据）

Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).

Input

Output

Sample Input
banana band bee absolute acm ba b band abc

Sample Output
2 3 1 0

#include <iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct node {
int n ;
node *w[28];
node(){
n=0;
for(int i=0;i<28;i++){
w[i]=NULL;
}
}

};
node head;

void build(char a[], int len) {
node *p = &head;

for (int i = 0; i < len; ++i) {
if((p->w[a[i] - 'a']) != NULL) {

p = p->w[a[i] - 'a'];
p->n++;
} else {
node *q=new(malloc(sizeof(node)))node;
p->w[a[i] - 'a'] = q;
p = q;
p->n++;
}
}

}

int query(char a[], int len){
node *p=&head;
for (int i = 0; i < len; ++i)
{
if((p->w[a[i]-'a'])!=NULL){
p = p->w[a[i] - 'a'];

}else{
return 0;
}
}
return p->n;

}

int main(int argc, char const *argv[]) {
char c[101];
int mode=0;
while(gets(c)&&strlen(c)){
build(c,(int)strlen(c));

}
while(gets(c)){
cout<<query(c,(int)strlen(c))<<endl;
}

return 0;
}