• HDU2846【字典树】


    题意:
    百度。

    思路:

    一个串的插入只能搞出这个串的前缀,然而对于要query的串是子串,所以插入的时候暴力插入所有字母开头的串。。。。
    然后还要注意到自己的串本身会叠加字典树中的前缀,要标记掉。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef pair<int,int> PII;
    const int N=2e6+10;
    int g[N][27],sz,num[N],id[N];
    int n,m;
    
    void INS(char *str,int temp)
    {
        int p=0;
        int len=strlen(str),index;
        for(int i=0;i<len;i++)
        {
            index=str[i]-'a';
            if(!g[p][index])
            {
                sz++;
                memset(g[sz],0,sizeof(sz));
                g[p][index]=sz;
            }
            p=g[p][index];
            if(id[p]!=temp)
            {
                num[p]++;
                id[p]=temp;
            }
        }
    }
    
    int query(char *str)
    {
        int p=0;
        int len=strlen(str),index;
        for(int i=0;i<len;i++)
        {
            index=str[i]-'a';
            if(!g[p][index])
                return 0;
            p=g[p][index];
        }
        return num[p];
    }
    
    int main()
    {
        char s[23];
        scanf("%d",&n);
        memset(g[0],0,sizeof(g[0]));
        sz=0;
        while(n--)
        {
            scanf("%s",s);
            int len=strlen(s);
            for(int i=0;i<len;i++)
            INS(s+i,n);
        }
        scanf("%d",&m);
        while(m--)
        {
            scanf("%s",s);
            printf("%d
    ",query(s));
        }
        return 0;
    }
    
    


  • 相关阅读:
    docker的安装
    Linux的常用命令
    HTTP协议,HTTPS协议,Websocket协议
    常用排序
    go的数组,切片,map
    if-else,switch,for循环
    go的函数,包以及mode的补充
    Android学习笔记——从源码看Handler的处理机制
    ElementUI
    关于IO的理解
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777421.html
Copyright © 2020-2023  润新知