zoukankan      html  css  js  c++  java
  • 字典树从第i个构造HDU2846

    http://www.cnblogs.com/ziyi--caolu/archive/2012/12/13/2816279.html  (参考)

    附我的代码:

    /****HDU2846
        *构造 字典树 的方法
        *字符串匹配
        *STRING S=X1X2X3X4...
        *X1...  +X2...+X3...+ + +...
        **ABABBBB  ABABBB AND ABBBB  IS  REPEATED !
        * CREATE A TAG
    */
    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn=500050;//600050  Memory Limit Exceeded
                            //400050 Runtime Error (ACCESS_VIOLATION)   array out
    struct node
    {
        int nxt[26];
        int num;
        int tag;
    }tre[maxn];
    int p,q,cnt,len;
    char s[50];
    void add(int now,int x)
    {
        if(len==x) return;
        int  v=s[x]-'a';
        if(!tre[now].nxt[v]) tre[now].nxt[v]=++cnt;
        if(tre[tre[now].nxt[v]].tag!=p+1)
        {
            tre[tre[now].nxt[v]].num++;
            tre[tre[now].nxt[v]].tag=p+1;
        }
        add(tre[now].nxt[v],x+1);
    }
    
    int fin(int now,int x)
    {
        if(len==x) return tre[now].num;
        int v=s[x]-'a';
        if(!tre[now].nxt[v])return 0;
        fin(tre[now].nxt[v],x+1);
    }
    int main()
    {
        scanf("%d",&p);
        memset(tre,0,sizeof(tre));
        cnt=0;
        while(p--)
        {
            scanf("%s",s);
            len=strlen(s);
            for(int i=0;i<len;i++)
                add(0,i);
        }
        scanf("%d",&q);
        while(q--)
        {
            scanf("%s",s);
            len=strlen(s);
            printf("%d
    ",fin(0,0));
        }
        return 0;
    }
    View Code
    落霞与孤鹜齐飞,秋水共长天一色
  • 相关阅读:
    Fbpanel-轻巧的面板措施
    Skype for Linux 1.4 Alpha 公布
    KFTPgrabber 0.8.1
    Ardour:专业的数字音频任务站
    Cinelerra:视频编纂软件
    V2EX::ING 与 INGC
    HandBrake:DVD 转换工具
    XML Copy Editor:XML 编纂器
    Abraca:XMMS2 的客户端
    KMess:MSN Messenger for KDE
  • 原文地址:https://www.cnblogs.com/star-and-me/p/6776474.html
Copyright © 2011-2022 走看看