hdu 1671 字典树 模板

来源:互联网 发布:plulive直播软件 编辑:程序博客网 时间:2024/05/16 19:45
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>struct Trie{    int num;    Trie *next[10];}root;void createTrie(char *str){    int len = strlen(str);    Trie *p = &root, *q;    for(int i = 0; i < len; i++)    {        int id = str[i] - '0';        if(p->next[id] == NULL)        {            q = new Trie;            q->num = 1;            for(int j = 0; j < 10; j++) q->next[j] = NULL;            p->next[id] = q;            p = p->next[id];        }        else        {            p->next[id]->num++;            p = p->next[id];        }    }}int findTrie(char *str){    int len = strlen(str);    Trie *p = &root;    for(int i = 0; i < len; i++)    {        int id = str[i] - '0';        p = p->next[id];    }    return p->num;}void Free(Trie *p){    for(int i = 0; i < 10; i++)        if(p->next[i]) Free(p->next[i]);    delete p;}int main(){    int t;    scanf("%d", &t);    while(t--)    {        int n;        char str[10010][15];        scanf("%d", &n);        for(int i = 0; i < 10; i++) root.next[i] = NULL;        for(int i = 0; i < n; i++)        {            scanf("%s", str[i]);            createTrie(str[i]);        }        int ans;        for(int i = 0; i < n; i++)        {            ans = findTrie(str[i]);            if(ans > 1)            {                printf("NO\n");                break;            }        }        if(ans == 1) printf("YES\n");        for(int i = 0; i < 10; i++)            if(root.next[i]) Free(root.next[i]);    }}

原创粉丝点击