2406(KMP単純サイクル節) - パワーストリングスPOJ - G:KMP&トピック16 [Kuangbinが飛ぶためにあなたを取る]をKMP&Manacher延長

[Kuangbinが飛ぶためにあなたを取る] KMP&トピック16が延長KMP&Manacher

G - パワーストリングス

POJ - 2406

トピック:

二つの文字列aとbのを考えると、私たちは彼らの連結する* bを定義します。例えば、= "ABC" とし、B = "DEF" *のB = "ABCDEF" もし。A ^ 0 = ""(空の文字列)と^(N + 1)*は(A ^ n)を=:我々は負でない整数乗算、累乗として連結を考えた場合、通常の方法で定義されています。
入力
各テストケースは、印刷可能文字の文字列sを表す入力のラインです。Sの長さは、少なくとも1であり、そして100万文字を超えることはありません。期間を含む行は、最後のテストケースに従います。
出力
それぞれについてあなたは最大のnように、S = A ^ nは、いくつかの文字列Aのを印刷する必要がありますね。
サンプル入力
ABCDは、
AAAAの
ABABAB 
サンプル出力
1 
4 
3
ヒント
この問題は、巨大な入力を持っている、超過時間制限を回避するために、代わりにCINのscanf関数を使用します。
サイクル数が必要な文字列セクション:タイトルの意味
思考:文字列は、注目すべき場合、その出力循環組成の全てではない場合は-1ループ部が構成されている場合、N-nexttこの長さは、サイクルの長さの合計で割ってと[n]はループ部の長さは、あります日長
 
//  
// 2019年8月15日にHJYLによって作成されます。
//
する#include <iostreamの> 
の#include <ベクトル> 
の#include <マップ> 
書式#include <文字列> 
の#include <キュー> 
の#include <スタック> 
の#include < セット > 
の#include <アルゴリズム> 
書式#include <cstdioを> 
する#include < CString> 
の#include <cmath> 
の#include <cstdlib> 
名前空間stdを使用。
const int型MAXN = 1E7 + 10 
チャーSTR [MAXN]。
int型nextt [MAXN]。
 = 0、J = -1 ; 
    nextt [ 0] = - 1 
    INT、N = STRLEN(STR)。
    しながら、式(I < N)
    { 
        場合 - (1 || STR [I] == J == STR [J])
        { 
            iが ++、J ++をもし(!STR [I] = STR [J])
                nextt [i]は = jで。
            
                nextt [I] = nextt [J]。
        } そう
            J = nextt [J]。
    } 
} 
メインINT()
{ 
    //freopenは( "C:\\ユーザー\\ asus567767 \\ CLionProjects \\無題\\テキスト"、 "R"、STDIN); 
    一方、(〜のscanf("%sの" 、STR))
    { 
        場合(STR [0] == '' ブレーク
        INT LEN = STRLEN(STR)。
        getnextt(); 
        もし(LEN%(LEN-nextt [LEN])== 0 
         のprintf("%Dを\ n"、LEN /(LEN-nextt [LEN]))。
        
            のprintf("1つの\ N" ); 
    } 
    戻り 0 
}

 

 

 
 

おすすめ

転載: www.cnblogs.com/Vampire6/p/11360900.html