zoukankan      html  css  js  c++  java
  • Immediate Decodability[UVA644](Trie入门)

    传送门

    题意:给出一些数字串,判断是否有一个数字串是另一个串的前缀。

    这题真的可以算是Trie树的一道模板题了。

    先把Trie树建好,建树的时候记录一个sum表示一个节点有多少个串会包含此节点,然后再记录一个end表示这个节点是不是一个串的结尾。

    然后dfs/bfs遍历整个Trie树若一个节点x满足end[x]=true && sum[x]>=2则题目条件成立。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    string s;
    int trie[1000][2];
    int tot, sum[1000];
    bool ennd[1000], ans;
    void insert(string t) {
        int p = 1;
        for (int i = 0; i < (int)t.length(); i++) {
            int k = t[i] - '0';
            sum[p]++;
            if (!trie[p][k]) trie[p][k] = ++tot;
            p = trie[p][k];
        }
        sum[p]++;
        ennd[p] = 1;
    }
    void dfs(int x) {
        if (ennd[x] && sum[x] >= 2) ans = 1;
        if (trie[x][0]) {
            dfs(trie[x][0]);
        }
        if (trie[x][1]) {
            dfs(trie[x][1]);
        }
    }
    int case_num;
    int main() {
        while (cin >> s) {
            case_num++;
            if (s[0] == '9') continue;
            ans = 0;
            tot = 1;
            memset(ennd, 0, sizeof(ennd));
            memset(sum, 0, sizeof(sum));
            memset(trie, 0, sizeof(trie));
            insert(s);
            while (cin >> s) {
                if (s[0] == '9') break;
                insert(s);
            }
            dfs(1);
            if (ans) printf("Set %d is not immediately decodable
    ", case_num);
            else printf("Set %d is immediately decodable
    ", case_num);
        }
        return 0;
    }
  • 相关阅读:
    java数据结构——哈希表(HashTable)
    java数据结构——红黑树(R-B Tree)
    java数据结构——二叉树(BinaryTree)
    java数据结构——递归(Recursion)例题持续更新中
    电路布线
    Cordova 入门
    mysql 分组加行号
    数据库表添加行号
    java jsp自定义标签
    java web Listener的简单使用案例
  • 原文地址:https://www.cnblogs.com/zcr-blog/p/12246921.html
Copyright © 2011-2022 走看看