zoukankan      html  css  js  c++  java
  • HDOJ 1247 Hat’s Words(trie树入门)

    题意:

    问一个字符串是否由字典里面的两个字符串组成。

    思路:

    字典树:建树,枚举

    #include <iostream>
    using namespace std;
    
    struct node {
        bool isword;
        int child[26];
    } trie[100010];
    
    char dict[50010][21];
    int size = 0;
    
    void Insert(const char* word, int rt)
    {
        if (*word == '\0')
        {
            trie[rt].isword = true;
            return ;
        }
        int m = *word - 'a';
        if (trie[rt].child[m])
        {
            Insert(word + 1, trie[rt].child[m]);
        }
        else
        {
            trie[rt].child[m] = ++size;
            Insert(word + 1, size);
        }
    }
    
    bool Query(const char* word, int rt)
    {
        if (*word == '\0')
            return trie[rt].isword;
    
        int m = *word - 'a';
        if (!trie[rt].child[m])
            return false;
        else
            return Query(word + 1, trie[rt].child[m]);
    }
    
    int main()
    {
        int n = 0;
        while (scanf("%s", dict[n]) != EOF)
            Insert(dict[n++], 0);
    
        char word[21];
        for (int i = 0; i < n; ++i)
        {
            bool flag = false;
            for (int j = 0; dict[i][j+1] != '\0'; ++j)
            {
                if (flag)  break;
                word[j] = dict[i][j];
                flag = Query(word, 0) && Query(&dict[i][j+1], 0);
            }
            if (flag)
                printf("%s\n", dict[i]);
            memset(word, 0, sizeof(word));
        }
        return 0;
    }
  • 相关阅读:
    概率与数学期望
    UVa10870
    UVa10870
    特殊符号+运算优先级
    特殊符号+运算优先级
    poj 2065 SETI(gauss--->≡)
    poj 2065 SETI(gauss--->≡)
    线性筛法证明
    HDU 1728 逃离迷宫
    T^T ONLINE JUDGE 2401 尼克的任务
  • 原文地址:https://www.cnblogs.com/kedebug/p/2873937.html
Copyright © 2011-2022 走看看