• <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++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              1 隨筆 :: 52 文章 :: 17 評(píng)論 :: 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 閱讀(594) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 字符串處理
            国产精品99久久不卡| 久久久国产精华液| 麻豆成人久久精品二区三区免费| 精品久久人人爽天天玩人人妻| 国产成人精品久久亚洲| 2021国内久久精品| 国产精品女同久久久久电影院| 精品国产福利久久久| 手机看片久久高清国产日韩| 亚洲va久久久噜噜噜久久天堂| 欧美激情精品久久久久| 中文字幕久久亚洲一区| 国产精品久久久久久搜索 | 久久精品国产男包| 996久久国产精品线观看| 欧美国产精品久久高清| 东京热TOKYO综合久久精品| 欧美伊人久久大香线蕉综合69| 久久无码人妻一区二区三区| 久久久久人妻一区精品| 成人久久综合网| 久久99热这里只有精品国产| 久久久精品无码专区不卡| 久久久亚洲欧洲日产国码二区| 亚洲欧美成人久久综合中文网| 日本免费久久久久久久网站| 久久婷婷五月综合97色| 热久久最新网站获取| 久久久久久青草大香综合精品 | 国产高潮久久免费观看| 97精品久久天干天天天按摩| 国产激情久久久久久熟女老人| 欧洲国产伦久久久久久久| 国产精品成人久久久久三级午夜电影 | 久久午夜夜伦鲁鲁片免费无码影视| 91精品国产91久久久久久| 精品无码久久久久久午夜| 欧洲成人午夜精品无码区久久| 东方aⅴ免费观看久久av| 亚洲午夜久久久影院| 久久人人爽人人爽人人片AV不|