您的位置:首页 > 其它

[HDOJ 1251] 统计难题 [字典树]

2014-05-03 23:32 375 查看
裸题...

#include <cstdio>
#include <cstring>

using namespace std;

const int N=500000;

struct Node {
Node *ch[26];
int num;
};

Node a
;
Node *root;
char s[11];
int p=0;

Node *newNode() {
memset(a[p].ch,0,sizeof(a[p].ch));
a[p].num=0;
return &a[p++];
}
void insert(char *s) {
Node *cur=root;
cur->num++;
while (*s!='\0') {
int t=*(s++)-'a';
if (cur->ch[t]==NULL) cur->ch[t]=newNode();
cur=cur->ch[t];
cur->num++;
}
}
int getans(char *s) {
Node *cur=root;
while (*s!='\0') {
int t=*(s++)-'a';
if (cur->ch[t]==NULL) return 0;
cur=cur->ch[t];
}
return cur->num;
}

int main() {
root=newNode();
gets(s);
while (s[0]!='\0') {
insert(s);
gets(s);
}
while (scanf("%s",s)!=EOF) {
printf("%d\n",getans(s));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: