zoukankan      html  css  js  c++  java
  • HDU 1247

    简单的字典树 - -,求一个单词是否由两个单词组成

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    #define maxn 26
    struct node
    {
        int sum;
        node *next[26];
    };
    node *root;
    char a[50005][30];
    void Insert(char *s);
    bool Find(char *s);
    bool Query(char *s);
    int main()
    {
        int i, n=0;
        root = new node();
        for(i=0; scanf("%s", a[i]) != EOF; i++)
            Insert(a[i]);
        n = i;
        for(i=0; i<=n; i++)
        {
            if(Query(a[i]))
                printf("%s ", a[i]);
        }
        return 0;
    }
    void Insert(char *s)
    {
        node *p = root;
        for(int i=0; s[i]; i++)
        {
            int k = s[i] - 'a';
            if(!p->next[k])
                p->next[k] = new node();
            p = p->next[k];
        }
        p->sum = 1;
    }
    bool Find(char *s)
    {
        node *p = root;
        for(int i=0; s[i]; i++)
        {
            int k = s[i] - 'a';
            if(!p->next[k])
                return false;
            p = p->next[k];
        }
        if(p->sum)return true;
        return false;
    }
    bool Query(char *s)
    {
        node *p = root;
        for(int i=0; s[i]; i++)
        {
            int k = s[i] - 'a';
            p = p->next[k];
            if(p->sum && Find(s+i+1))
                return true;
        }
        return false;
    }
  • 相关阅读:
    SQL Server游标的使用【转】
    Window.Open参数、返回值
    .NET中class和struct的区别
    MVC中的几个问题汇总
    委托
    Hadoop集群环境搭建
    数学问题
    Ubuntu命令模式基础
    递归与分治-合并排序、快速排序以及循环赛问题
    Mongodb基础
  • 原文地址:https://www.cnblogs.com/liuxin13/p/3905102.html
Copyright © 2011-2022 走看看