• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            為生存而奔跑

               :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

            留言簿(5)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            積分與排名

            • 積分 - 326992
            • 排名 - 74

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

              1/*hdu2222*/
              2#include<iostream>
              3#include<algorithm>
              4#include<map>
              5using namespace std;
              6
              7const int MAXQ=500000+10;
              8const int MAXN = 1000000+10;
              9class trie
             10{
             11public:
             12    trie *next[26];
             13    trie *fail;
             14    int count;
             15    trie()
             16    {
             17        for(int i=0;i<26;i++)
             18            next[i]=NULL;
             19        count=0;
             20    }

             21}
            ;
             22trie *root;
             23trie *q[MAXQ];
             24char text[MAXN];
             25void insert(char *s)
             26{
             27    int i,index;
             28    trie *now=root;
             29    i=0;
             30    while(s[i]!='\0')
             31    {
             32        index=s[i]-'a';
             33        if(now->next[index]==NULL)
             34            now->next[index]=new trie;
             35        now=now->next[index];
             36        i++;
             37    }

             38    now->count++;
             39}

             40void build_AC_automation()
             41{    
             42    trie *p,*now;
             43    int top=0,tail=1;
             44    q[0]=root;
             45    root->fail=NULL;
             46    while(top<tail)
             47    {
             48        now=q[top++];
             49        for(int i=0;i<26;i++)
             50            if(now->next[i]!=NULL)
             51            {
             52                if(now==root)
             53                    now->next[i]->fail=root;
             54                else
             55                {
             56                    p=now->fail;
             57                    while(p!=NULL)
             58                    {
             59                        if(p->next[i]!=NULL)
             60                        {
             61                            now->next[i]->fail=p->next[i];
             62                            break;
             63                        }

             64                        p=p->fail;
             65                    }

             66                    if(p==NULL)
             67                        now->next[i]->fail=root;
             68                }

             69                q[tail++]=now->next[i];
             70            }

             71    }

             72}

             73int AC_search()
             74{
             75    trie *cur=root,*p;
             76    int index,ans;
             77    ans=0;
             78    for(int i=0;text[i]!='\0';i++)
             79    {
             80        index=text[i]-'a';
             81        while(cur->next[index]==NULL && cur!=root)
             82            cur=cur->fail;
             83        cur=cur->next[index];
             84        if(cur==NULL)
             85            cur=root;
             86        p=cur;
             87        while(p!=NULL && p->count!=-1)
             88        {
             89            ans+=p->count;
             90            p->count=-1;
             91            p=p->fail;
             92        }

             93    }

             94    return ans;
             95}

             96int main()
             97{
             98    int t,n;
             99    char keyword[52];
            100    scanf("%d",&t);
            101    while(t--)
            102    {
            103        root=new trie();
            104        scanf("%d",&n);
            105        while(n--)
            106        {
            107            scanf("%s",keyword);
            108            insert(keyword);
            109        }

            110    
            111        scanf("%s",text);
            112        build_AC_automation();
            113        printf("%d\n",AC_search());
            114    }

            115}

            116

             

            posted on 2009-07-24 16:45 baby-fly 閱讀(907) 評(píng)論(2)  編輯 收藏 引用 所屬分類: Algorithm

            Feedback

            # re: 【AC自動(dòng)機(jī)】HDU 2222 2009-10-16 13:11 july
            你這處理方法不行, 把cout設(shè)了-1 他第二次跑到那個(gè)點(diǎn)就不會(huì)再算了


            看這數(shù)據(jù)
            1
            2
            ssherr
            he
            ssherrssherr

            你答案是2  回復(fù)  更多評(píng)論
              

            # re: 【AC自動(dòng)機(jī)】HDU 2222 2009-10-17 11:37 july
            @july
            沒(méi)錯(cuò),原來(lái)他的題目就是只算一次..........  回復(fù)  更多評(píng)論
              

            亚洲国产成人乱码精品女人久久久不卡 | 日产精品久久久久久久| 亚洲国产精品久久久久久| 亚洲AV无码1区2区久久| 中文字幕久久亚洲一区| 久久精品国产精品亚洲艾草网美妙| 国产欧美一区二区久久| …久久精品99久久香蕉国产| 亚洲国产美女精品久久久久∴| 亚洲精品99久久久久中文字幕 | 久久国产三级无码一区二区| 亚洲国产天堂久久综合网站| 久久精品国产影库免费看| 97久久超碰国产精品2021| 久久91精品国产91久久麻豆| 久久99国产精品二区不卡| 久久免费美女视频| 久久国产免费| 久久综合偷偷噜噜噜色| 亚洲精品无码久久一线| 久久人人妻人人爽人人爽| 99国产精品久久| 26uuu久久五月天| 亚洲国产成人久久综合碰| 亚洲综合日韩久久成人AV| 久久综合狠狠综合久久综合88| 久久精品国产亚洲av高清漫画 | 国产精品熟女福利久久AV| 久久夜色撩人精品国产| 久久午夜福利无码1000合集| 久久综合综合久久综合| AAA级久久久精品无码区| 亚洲精品99久久久久中文字幕| 国产A三级久久精品| 久久亚洲国产中v天仙www| 久久久久亚洲av成人无码电影| 无码国内精品久久综合88| 97久久精品无码一区二区| 日韩AV毛片精品久久久| 精品乱码久久久久久久| 久久伊人中文无码|