• <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>
            #include <iostream>
            #include 
            <cstdio>
            #include 
            <cstdlib>
            #include 
            <queue>
            #include 
            <vector>

            using namespace std;

            struct Trie{
                
            int    cnt;
                Trie
            *  next[52], *prefix;
            }
            Table[1000000];

            int   idx,id;
            Trie
            * root;
            char  str[1000011];
            bool  visite[1010];
            vector
            <int> flag[1010];

            void init(){
                idx
            = 0; id= 1;
                root
            = &Table[idx];
                memset( Table[
            0].next, 0sizeof(Table[0].next) );
                Table[
            0].cnt= 0; Table[0].prefix= NULL;
                memset( visite, 
            falsesizeof(visite) );
            }


            void insert( char* s )
            {
                Trie
            * r= root;
                
            while*s ){
                    
            int t;
                    
            if*s>= 'a' && *s<= 'z' )t= *s- 'a';
                    
            if*s>= 'A' && *s<= 'Z' )t= *s- 'A'+ 26;
                    
            if!r->next[t] ){
                        
            ++idx;
                        memset( Table[idx].next, 
            0sizeof(Table[idx].next) );
                        Table[idx].cnt
            = 0; Table[idx].prefix= NULL;
                        r
            ->next[t]= &Table[idx];
                    }

                    r
            = r->next[t]; s++;
                }

                
                
            if( r->cnt ) flag[r->cnt].push_back( id++ );
                
            else         r->cnt= id++;
            }


            void get_prefix()
            {
                Trie
            * r= root;
                queue
            <Trie*> q;
                q.push( root ); root
            ->prefix= NULL;
                
                
            while!q.empty() ){
                    Trie
            * father= q.front(); q.pop();
                    
            forint i= 0; i< 52++i )
                    
            if( father->next[i] ){
                        Trie
            * tmp= father->prefix;
                        
            while( tmp && !tmp->next[i] ) tmp= tmp->prefix;
                        
            if!tmp ) father->next[i]->prefix= root;
                        
            else       father->next[i]->prefix= tmp->next[i];
                        
                        q.push( father
            ->next[i] );
                    }

                }

            }


            void ac_run(){
                Trie
            * p= root;
                
            char* s= str;
                
            while*s ){
                    
            int t;
                    
            if*s>= 'a' && *s<= 'z' )t= *s- 'a';
                    
            if*s>= 'A' && *s<= 'Z' )t= *s- 'A'+ 26;
                    
            while!p->next[t] && p!= root ) p= p->prefix;
                    p
            = p->next[t];
                    
            if!p ) p= root;
                    Trie
            * tp= p;
                    
            while( tp!= root && tp->cnt!= 0 ){
                        visite[tp
            ->cnt]= true;
                        tp
            = tp->prefix;}

                    s
            ++;
                }

            }


            int main()
            {
                
            int test, n;
                
            char s[1010];
                scanf(
            "%d",&test); getchar();
                
            while( test-- ){
                    gets(str); init();
                    scanf(
            "%d",&n ); getchar();
                    
            forint i= 0; i< n; ++i ) {
                        gets(s); insert(s); }

                    get_prefix(); ac_run();
                    
            forint i= 1; i<= n; ++i )
                    
            if( visite[i] ){
                        
            for( size_t j= 0; j< flag[i].size(); ++j )
                        visite[ flag[i][j] ]
            = true;}

                    
            forint i=1; i<=n;++i)
                    
            if(visite[i])puts("y");
                    
            else puts("n");
                    
            for(int i= 0; i<= n; ++i ) flag[i].clear();
                }

                
                
            return 0;
            }

            posted on 2009-04-15 15:42 Darren 閱讀(525) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久久久久青草大香综合精品| 精品久久久久久国产潘金莲| 亚洲伊人久久综合中文成人网 | 亚洲综合精品香蕉久久网97| 久久99国产一区二区三区| 国产精品欧美久久久久天天影视| 久久久久久久综合日本| 久久无码专区国产精品发布 | 亚洲精品综合久久| 精产国品久久一二三产区区别| 久久综合综合久久综合| 久久精品国产福利国产秒| 三级韩国一区久久二区综合| 亚洲国产另类久久久精品小说| 久久这里只有精品首页| 亚洲乱码日产精品a级毛片久久| 国产V亚洲V天堂无码久久久| 性做久久久久久久久久久| 久久超碰97人人做人人爱| 久久精品夜色噜噜亚洲A∨| 亚洲精品美女久久久久99| 99久久精品免费看国产| 亚洲精品乱码久久久久久自慰| 国产一区二区精品久久岳| 久久亚洲欧美国产精品| 一本综合久久国产二区| 色综合久久最新中文字幕| 一本色道久久综合狠狠躁| 久久国产三级无码一区二区| 国产精品美女久久久久网| 久久婷婷国产剧情内射白浆| 国产免费久久精品99久久| 久久99精品久久久久久久久久| 亚洲国产成人久久精品99| 国产精品99久久久久久董美香| 久久99久久99精品免视看动漫| 久久精品一本到99热免费| 欧美久久一级内射wwwwww.| 国产69精品久久久久99尤物| 国产美女久久精品香蕉69| 77777亚洲午夜久久多喷|