各プレフィックス文字列セクションを求めるサイクル(サイクル

質問の意味
各セクションプレフィックスに表示され、最短のサイクルを取得するために、文字列、文字列の各プレフィックス番号を与えられました

説明

次の文字列全体の配列が決定され、各プレフィクスの、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、0sizeof 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 }

 

おすすめ

転載: www.cnblogs.com/hhyx/p/12521546.html