#質問の意味
各セクションプレフィックスに表示され、最短のサイクルを取得するために、文字列、文字列の各プレフィックス番号を与えられました
#説明
次の文字列全体の配列が決定され、各プレフィクスの、I-NEXT [I]サイクリックプレフィックスの長さの最小部分です、
iが割り切れる場合は、完全なサイクルによって構成されるプレフィックスIループ部が、数値を決定することができます
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 CONST INT N = 1E6 + 10 。 4 int型のTT; 5 INT N。 6 チャーS [N]。 7 INT メイン(){ 8 ながら(scanf関数は(" %D%S "、およびN、S + 1)&& N){ 9 のprintf(" テストケース#%D \ n "、++ TT)。 10 INT NE [N]。 11 のmemset(NE、0、sizeof NE)。 12 のために(INT iは= 2、J = 0 ; I <= N; I ++ ){ 13 ながら(J && S [I] = S [J +!1 ]) 14 J = NE [J]。 15 であれば(S [I] == S [j + 1 ]) 16 J ++ 。 17 NE [I] = J。 18 } 19 のために(INT iは= 2 ; iが<= N; I ++ ){ 20 であれば(I%(I - NE [I])== 0 && I /(I - NE [I])>1 ) 21 のprintf(" %D%D \ n "、I、I /(I- NE [I]))。 22 } 23 プット("" )。 24 } 25 }