zoukankan      html  css  js  c++  java
  • hdu-2846 Repository

    思路:

    好题,必须记一笔。

    这题有两个之前没有接触过的字典树新变形。

    第一个是insert的方式,不再只是单单的将一整个单词都插进去,而是从单词的第一个字母开始往后遍历,依次插入第i个字母到末尾的单词,这样做就可以满足题目中“substring”的要求,即将“substring”的问题转换为我们熟悉的字典树可以解决的“前缀”问题。

    第二个是标记每个char* s所属的原始字符串,这种做法可以避免一个单词有相同部分的问题。

    AC代码:

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    struct node
    {
        int num;
        int id;
        struct node* next[26];
        node()
        {
            num = 0;
            id = -1;
            for(int i = 0;i < 26;i++)
                next[i] = NULL;
        }
    };
    node* root;
    char str[10007][27];
    
    void Insert(char* s,int mark)
    {
        node* p = root;
        for(;*s!='';s++)
        {
            int n = *s-'a';
            if(p->next[n] == NULL) {
                p->next[n] = new node();
                p = p->next[n];
                p->id = mark;
                p->num = 1;
            }
            else {
                p = p->next[n];
                if(p->id != mark) {
                    p->id = mark;
                    p->num++;
                }
            }
        }
    }
    
    int search(char* s)
    {
        node* p = root;
        for(;*s!='';s++)
        {
            int n = *s-'a';
            if(p->next[n] == NULL) return 0;
            p = p->next[n];
        }
        return p->num;
    }
    
    int main()
    {
        root = new node();
        int P;
        cin>>P;
        for(int i = 0;i < P;i++)
        {
            cin>>str[i];
            char* tmp = str[i];
            for(;*tmp!='';tmp++)
                Insert(tmp,i);
        }
        int tc;
        cin>>tc;
        char t[27];
        while(tc--)
        {
            cin>>t;
            cout<<search(t)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    4-18
    Vue学习 2017-4-9
    前端杂谈
    不错的博客哦!
    待整理知识杂项
    Vue学习历程
    王工的权限理解
    【NX二次开发】图标图像
    【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
    获取计算机名
  • 原文地址:https://www.cnblogs.com/immortal-worm/p/5199943.html
Copyright © 2011-2022 走看看