zoukankan      html  css  js  c++  java
  • trie树(板子)

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    #define fuck(x) cout<<#x<<" "<<x<<endl;
    struct node
    {
        int cnt,tag;
        node*son[26];
    }*root;
    char s[105];
    node*build()
    {
        node*tmp=new(node);
        tmp->cnt=0;
        tmp->tag=0;
        memset(tmp->son,0,sizeof(tmp->son));
        return tmp;
    }
    void myinsert()
    {
        int len=strlen(s);
        char*p=s;
        node*r=root;
        while(*p)
        {
            int id=*p-'a';
            if(!(r->son[id]))
                r->son[id]=build();
            r=r->son[id];
            if((s+len-1)!=p)
                (r->cnt)++;
            p++;
        }
        r->tag++;
    }
    int query1()
    {
        char*p=s;
        node*r=root;
        while(*p)
        {
            int id=*p-'a';
            if(!(r->son[id]))
                return 0;
            p++;
            r=r->son[id];
        }
        return r->tag;
    }
    int query2()
    {
        char*p=s;
        node*r=root;
        while(*p)
        {
            int id=*p-'a';
            if(!(r->son[id]))
                return 0;
            p++;
            r=r->son[id];
        }
        return r->cnt;
    }
    int main()
    {
        int n,m;
        scanf("%d %d",&n,&m);
        root=build();
        for(int i=1;i<=n;i++)
            scanf("%s",s),myinsert();
        for(int i=1;i<=m;i++)
        {
            int ans;
            scanf("%s",s);
            ans=query1();
            cout<<"字符串:"<<s<<"出现了"<<ans<<"次"<<endl;
            ans=query2();
            cout<<"字符串:"<<s<<"作为前缀出现了"<<ans<<"次"<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    第二阶段团队绩效评分
    团队冲刺2.9
    团队冲刺2.8
    团队冲刺2.7
    团队冲刺2.6
    团队冲刺2.5
    项目总结以及事后诸葛亮会议
    做什么都队第二阶段绩效评估
    第二阶段冲刺第十天
    第二阶段冲刺第九天
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754872.html
Copyright © 2011-2022 走看看