统计难题
么么哒!!!今天总算独立把字典树做出来了,没用字典树模板做题,真开心,以后还要继续努力;
向斌哥(新一代男神,拿到阿里的offer)看齐
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1251
解题思路:
字典树:http://baike.baidu.com/view/2759664.htm?fr=aladdin
纯字典树题。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{
int cnt;
struct node *next[26];
node(){
cnt = 0;
memset(next,0,sizeof(next));
}
};
node *root = NULL;
void buildtrie(char *s){
node *p = root;
node *tmp = NULL;
int l = strlen(s);
for(int i = 0; i < l; i++){
if(p->next[s[i]-'a'] == NULL){
tmp = new node;
p->next[s[i]-'a'] = tmp;
}
p = p->next[s[i]-'a'];
p->cnt++;
}
}
void findtrie(char *s){
node *p = root;
int l = strlen(s);
for(int i = 0; i < l; i++){
if(p->next[s[i]-'a'] == NULL){
printf("0\n");
return;
}
p = p->next[s[i]-'a'];
}
printf("%d\n",p->cnt);
}
int main(){
char str[11];
root = new node;
while(gets(str)){
if(strcmp(str,"") == 0)
break;
buildtrie(str);
}
while(scanf("%s",str) != EOF){
findtrie(str);
}
return 0;
}