HDU1251-统计难题

来源:互联网 发布:水上电动滑板 淘宝 编辑:程序博客网 时间:2024/06/06 07:02

简单的Trie树即可解决。

#include <cstdio>#include <cstring>char s[15];struct Trie {    int cnt;    Trie *next[26];};void init(Trie *rt) {    rt->cnt = 0;    for (int i = 0; i < 26; i++) {        rt->next[i] = NULL;    }}Trie *build() {    Trie *p = new Trie;    init(p);    return p;}void insert(Trie *rt, char *s, int len) {    Trie *p = rt;    for (int i = 0; i < len; i++) {        int idx = s[i] - 'a';        if (p->next[idx] == NULL) {            p->next[idx] = new Trie;            init(p->next[idx]);        }        p = p->next[idx];        p->cnt++;    }}int search(Trie *rt, char *s, int len) {    Trie *p = rt;    for (int i = 0; i < len; i++) {        int idx = s[i] - 'a';        if (p->next[idx] == NULL) {            return 0;        }        p = p->next[idx];    }    return p->cnt;}int main(int argc, char const *argv[]) {    Trie *rt = build();    while (gets(s)) {        if (s[0] == '\0') {            break;        }        insert(rt, s, strlen(s));    }    while (scanf("%s", s) == 1) {        printf("%d\n", search(rt, s, strlen(s)));    }    return 0;}
0 0
原创粉丝点击