KMP(最長接頭辞と接尾辞)

http://acm.hdu.edu.cn/showproblem.php?pid=1358

期間

問題の説明
N文字(各文字が97と126の間でASCIIコードを持っている、包括的)で指定された文字列Sの各プレフィックスのために、我々は接頭辞が定期的に文字列であるかどうかを知りたいです。すなわちごとに、あるI(2 <= iが= Nを<)、我々は私のように書くことができる長さSのプレフィックスように(もしあれば)最大K> 1を知りたい Kは 、それが連結されK時間は、もちろんいくつかの文字列Aに、我々はまた、期間Kを知りたいです
 

 

入力
入力ファイルは、いくつかのテストケースで構成されています。各テストケースは、二つのラインで構成されています。最初のものはN(2 <= N <= 1 000 000)を含む - ストリングSの大きさは、2行目はSで入力ファイルがその上に数ゼロを有する、線で終わる文字列を含みます。
 

 

出力
各テストケースは、出力「テストケース番号」と一行に連続テストケース番号の、次に、各プレフィクスの長さIは、周期K> 1、出力I及び期間Kは、単一のスペースで区切られたプレフィックスのサイズを有します。プレフィックスサイズは昇順でなければなりません。各テストケースの後に空白行を印刷します。
 

 

サンプル入力
3 AAA 12 aabaabaabaab 0
 

 

サンプル出力
テストケース#1
2 2
3 3
テストケース#2
2 2
6 2
9 3
12 4
 
推薦します
JGShining
 
問題の意味:文字列、すべての出力Q:どのくらいの長さ(全体の長さ以下)のは、二つの同一のサブ文字列の最小値から得ることができます
 注意:タイトルだけでは最長の接頭辞と接尾辞を求めている、それは次の配列の最適化を実行することが最善ではありません(マッチング問題を使用することができます)
 
#include <cstdioを> 
する#include <CStringの> 
する#include <cmath> 
の#include <アルゴリズム> 
の#include <iostreamの> 
する#include <アルゴリズム> 
の#include <iostreamの> 
する#include <cstdioを> 
する#include < ストリング > 
の#include <CStringの> 
書式#include <stdio.hに> 
する#include < 文字列の.h>
 使用して 名前空間はstdを、
チャー [ 1000009します]。


 GETNEXT(CHAR *、int型 lenは、次)
{ 
    次の[ 0 ] = - 1 INT K = - 1、J = 0 一方、(J < LEN)
    { 
        場合 - (K == 1 || [j]が== [K])
        { 
            kは ++ 
            J ++ ; 
            次の[J] = K。
        } 
        
        { 
            K = 次の[K]。
        } 
    } 
} 

int型のmain()
{ 
    int型N-、ANS = 0 ;
     ながら(〜scanfの(" %のD "、およびN-)を&& N-)
    { 
        INT次に[ 1000009 ]; 
        scanfの(" %のS " 、A); 
        のprintf(" テストケース#%D \ N- "、 ++ ANS)

        のmemset(次、0はsizeof (次)); 
        GetNextの(A、N-、次); // 次の配列を見つける
        ためにint型 I = 2 ; I <= N; Iは++)// 各々を反復図2は、文字列よりも大きい
        {
             //I%I(I -次の[ i])と、文字列が数字で構成されていることを示している(1より大きい)と同じ文字列
            IF(次に[I]> = 1。 && I%(I -次に[I])= = 0 
            { 
                int型 L = I - 次に[I]; 
                のprintf(" %D%D \ N- "、I、I / L); // I / Lと同じで構成される文字列の同じ数を見つけます
            } 
        } 
        printf(" \ N- " ); 
    } 

    の戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/nonames/p/11294291.html