• <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>

            gzwzm06

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              1 隨筆 :: 52 文章 :: 17 評論 :: 0 Trackbacks
            Memory: 4440K Time: 657MS
            Language: C++ Result: Accepted
            #include <stdio.h>
            #include 
            <cstring>

            const int MAX = 201000 ;

            int n ;

            int cnt[MAX] , array[4][MAX] , *rank , *nrank , *sa , *nsa , h[MAX] ;
            char SText[MAX] ;

            void CreateSuffix()
            {
                
            int i , k ;
                rank 
            = array[0] ;
                nrank 
            = array[1] ;
                sa 
            = array[2] ;
                nsa 
            = array[3] ;

                
            for ( i = 0 ; i < n ; i++ )
                
            {
                    cnt[SText[i]]
            ++ ;
                }

                
            for ( i = 1 ; i < 256 ; i++ )
                
            {
                    cnt[i] 
            += cnt[i - 1] ;
                }

                
            for ( i = n - 1 ; i >= 0 ; i-- )
                
            {
                    sa[
            --cnt[SText[i]]] = i ;
                }

                
            for ( rank[sa[0]] = 0 , i = 1 ; i < n ; i++ )
                
            {
                    rank[sa[i]] 
            = rank[sa[i - 1]] ;
                    
            if ( SText[sa[i]] != SText[sa[i - 1]] )
                    
            {
                        rank[sa[i]]
            ++ ;
                    }

                }


                
            for ( k = 1 ; k < n && rank[sa[n - 1]] < n - 1; k *= 2 )
                
            {
                    
            for ( i = 0 ; i < n ; i++ )
                        cnt[rank[sa[i]]] 
            = i + 1 ;
                    
            for ( i = n - 1 ; i >= 0 ; i-- )
                    
            {
                        
            if ( sa[i] - k >= 0 )
                        
            {
                            nsa[
            --cnt[rank[sa[i] - k]]] = sa[i] - k ;
                        }

                    }


                    
            for ( i = n - k ; i < n ; i++ )
                    
            {
                        nsa[
            --cnt[rank[i]]] = i ;
                    }


                    
            for ( nrank[nsa[0]] = 0 , i = 1 ; i < n ; i++ )
                    
            {
                        nrank[nsa[i]] 
            = nrank[nsa[i - 1]] ;
                        
            if ( rank[nsa[i]] != rank[nsa[i - 1]]
                            
            || rank[nsa[i] + k] != rank[nsa[i - 1+ k] )
                        
            {
                            nrank[nsa[i]]
            ++ ;
                        }

                    }


                    
            int *= rank ; rank = nrank ; nrank = t ;
                    t 
            = sa ; sa = nsa ; nsa = t ;
                }

            }


            void CalHeight()
            {
                
            int i , j , k ;
                
            for ( i = 0 , k = 0 ; i < n ; i++ )
                
            {
                    
            if ( rank[i] == n - 1 )
                        h[rank[i]] 
            = k = 0 ;
                    
            else {
                        
            if ( k > 0 ) k-- ;
                        j 
            = sa[rank[i] + 1] ;
                        
            for ( ; SText[i + k] == SText[j + k] ; k++ ) ;
                        h[rank[i]] 
            = k ;
                    }

                }

            }


            int main()
            {
                
            char ks[MAX] ;
                
            int i , j , k , len , p1 , p2 , ans = 0 ;

                
            //scanf("%s", &SText) ;
                gets(SText) ;
                gets(ks) ;
                
            //scanf("%s", &ks ) ;

                len 
            = strlen(SText) ;
                SText[len] 
            = '#' ;

                strcat( SText , ks ) ;

                n 
            = strlen ( SText ) ;
                SText[n
            ++= 0 ;
                memset(cnt, 
            0sizeof(cnt)) ;

                CreateSuffix() ;
                CalHeight() ;

                
            for ( i = 0 ; i < n - 1 ; i++ )
                
            {
                    j 
            = sa[i]; 
                    
            if(j < len)p1 = 1
                    
            else p1 = -1
                    
                    k 
            = sa[i+1]; 
                    
            if(k < len)p2 = 1
                    
            else p2 = -1
                    
                    
            if(p1*p2<1 && h[i]>ans) 
                        ans 
            = h[i]; 
                }


                printf(
            "%d\n", ans) ;
                
                
            return 0 ;
            }
            posted on 2008-11-08 14:17 閱讀(583) 評論(0)  編輯 收藏 引用 所屬分類: 字符串處理
            国产激情久久久久影院小草 | 久久综合久久性久99毛片| 久久精品国产精品青草app| 伊人色综合久久| 伊人久久大香线蕉综合5g| 2020久久精品亚洲热综合一本| 一本色道久久综合狠狠躁| 精品国产91久久久久久久| 亚洲国产日韩欧美久久| 久久久久高潮毛片免费全部播放 | 国产精品美女久久久久网| 久久九九免费高清视频| 久久综合噜噜激激的五月天 | 一本色道久久99一综合| 丁香五月综合久久激情| 中文字幕久久精品无码| 久久精品中文字幕久久| 亚洲欧美成人综合久久久| 99久久国产免费福利| 色婷婷综合久久久久中文| 久久综合狠狠综合久久97色| 久久久亚洲欧洲日产国码二区| 欧美日韩成人精品久久久免费看| 久久国产精品无码HDAV| 久久99这里只有精品国产| 久久久久人妻精品一区三寸蜜桃| 99久久国语露脸精品国产| 色欲综合久久中文字幕网| 超级97碰碰碰碰久久久久最新 | 91精品国产综合久久精品| 久久只有这精品99| 久久久久亚洲精品天堂久久久久久 | 国产 亚洲 欧美 另类 久久| 国产V综合V亚洲欧美久久| 99久久无色码中文字幕人妻| 久久精品国产色蜜蜜麻豆| 欧美亚洲国产精品久久高清| 欧美精品丝袜久久久中文字幕| 精品久久综合1区2区3区激情| 大香网伊人久久综合网2020| 久久精品国产WWW456C0M|