• HDU 1251 统计难题 Tire模板题


    Tire 是一种用于实现字符串快速检索的多叉树结构。Tire的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符c,就沿着当前节点的c字符指针,走向该指针指向的方向。

    基本操作:

    int trie[SIZE][26], tot = 1;
    bool End[SIZE];
    void insert(char* str) {
        int len = strlen(str), p = 1;
        for (int k = 0; k < len; k++) {
            int ch = str[k] - 'a';
            if (trie[p][ch] == 0) trie[p][ch] = ++tot;
            p = trie[p][ch];
        }
        End[p] = true;
    }
    
    bool search(char* str) {
        int len = strlen(str), p = 1;
        for (int k = 0; k < len; k++) {
            p = trie[p][str[k] - 'a'];
            if (!p) return false;
        }
        return true;
    }

    HDU 1251 

    在树上每个节点存储一个整数cnt,记录该节点是多少个字符串的末尾节点。 对于每个询问,当遍历到最后一个字符时,统计答案。

    struct Node {
        int cnt;
        int idx;
    };
    
    
    Node trie[1000010][26];
    int tot = 1;
    bool End[1000010];
    
    void insert(char* str) {
        int len = strlen(str), p = 1;
        for (int k = 0; k < len; k++) {
            int ch = str[k] - 'a';
            if (trie[p][ch].idx == 0) trie[p][ch].idx = ++tot;
            trie[p][ch].cnt++;
            p = trie[p][ch].idx;
        }
        End[p] = true;
    }
    
    int search(char* str) {
        int sum = 0;
        int len = strlen(str), p = 1;
        for (int k = 0; k < len; k++) {
            if (k == len-1) return trie[p][str[k] - 'a'].cnt;
            p = trie[p][str[k] - 'a'].idx;
            if (p == 0) return 0;
        }
        //return End[p];
    }
    
    char s[105];
    
    int main() {
        //int f = 0;
        while (gets(s)) {
            if (s[0] == '') break;
            insert(s);
        }
        while (~scanf("%s", s)) {
            int res = search(s);
            printf("%d
    ", res);
        }
    } 
  • 相关阅读:
    【产品分析】数据中台
    【设计】设计规范
    【产品分析】用户行为分析套路
    【产品复盘】谷歌Chrome是如何蚕食互联网的?
    【设计】图表设计
    command
    解决win7系统远程桌面 server 2003 卡的问题
    sqlmap遇到url重写的示例
    ASP中可能出现的一种包含漏洞(Server.execute)
    绕过杀毒软件抓取windows密码
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13291999.html
Copyright © 2020-2023  润新知