• <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)  編輯 收藏 引用 所屬分類: 字符串處理
            一本久久免费视频| 久久久久久国产精品免费免费| 久久这里都是精品| 国产美女亚洲精品久久久综合| 久久人人爽人人爽人人片av麻烦| 久久国内免费视频| 四虎国产精品免费久久久| 久久亚洲中文字幕精品一区| 久久久久久精品无码人妻| 国产一级做a爰片久久毛片| 日韩中文久久| 欧美综合天天夜夜久久| 99久久综合国产精品免费| 国产精品免费久久久久电影网| 7777久久久国产精品消防器材| 99久久精品无码一区二区毛片 | 99久久99久久精品国产片果冻| 亚洲人成无码www久久久| 一本大道久久a久久精品综合| 一本久久a久久精品亚洲| 久久91精品综合国产首页| 99精品久久久久中文字幕| 99久久99久久精品国产片果冻| 久久黄视频| 99久久精品免费| 亚洲乱亚洲乱淫久久| 国产精品视频久久久| 久久精品亚洲精品国产色婷| 精品久久久一二三区| 青春久久| 国产69精品久久久久观看软件| 青青热久久国产久精品 | 久久综合精品国产一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 亚洲精品白浆高清久久久久久 | 久久久无码一区二区三区| 久久久久综合国产欧美一区二区| 久久免费视频观看| 久久夜色精品国产| 狠狠色丁香婷婷久久综合| 97久久精品人人澡人人爽|