【NOIP模板】 trie树

来源:互联网 发布:如何提升淘宝店铺排名 编辑:程序博客网 时间:2024/06/11 03:43
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct Trie {    int num;    bool excit;    Trie *child[26];} pool[100010], *tail = pool, *root;int ans, n, m, num = 0;char str[10050][25];Trie *newtrie() {    Trie *node = ++ tail;    node -> num = 0, node -> excit = false;    memset(node -> child, 0, sizeof(node -> child));    return node;}void insert(Trie *root, char *word) {    char *p = word;    Trie *node = root;    while(*p) {        int id = *p - 'a';        if(node -> child[id] == NULL)            node -> child[id] = newtrie();        node = node -> child[id];        node -> num ++, p ++;    }    node -> excit = true;}void query(Trie *root, char *word) {    ans = 0;    char *p = word;    Trie *node = root;    while(*p) {        int id = *p - 'a';        if(node -> num == 1) break;        node = node -> child[id];        p ++, ans ++;    }}int main() {    root = newtrie();    while(~ scanf("%s", str[++ num])) insert(root, str[num]);    for(int i = 1; i <= num; i ++) {        printf("%s ", str[i]);        query(root, str[i]);        for(int j = 0; j < ans; j ++)            printf("%c", str[i][j]);        printf("\n");    }    return 0;}
原创粉丝点击