CCは常に、今月の終わりに非常に落ち込んとなり、彼はどんな驚きなしで、残された唯一の99.9元があり、昨日彼のクレジットカードをチェックしました。彼はどのように、最後の日を乗り切るには約すぎて悩んと考えています。「HDU CakeMan」の起業家精神に触発されて、彼はお金を稼ぐためにいくつかの小さなものを販売することを望んでいます。もちろん、これは簡単な作業ではありません。
クリスマスは角を曲がったところであるので、男の子は自分のガールフレンドに送信するためにクリスマスプレゼントを選ぶ際に忙しいです。チェーンのブレスレットは良い選択であると考えられています。しかし、ブレスレットが鮮やかで生き生きと表示させるために皆、女の子の好きな色鮮やかな装飾のに知られているように物事は、いつもそう単純ではありません、その間、彼らは大学生としての成熟した側を表示したいです。CCは、女の子のニーズを理解した後、彼はCharmBraceletと呼ばれるチェーンブレスレットを販売する予定。CharmBraceletは女子が生き生きと表示するカラフルな真珠で作られ、そして最も重要なことは、それが真珠の色が左から右に接続巡回であることを意味環状鎖によって接続されなければならないということです。そして、巡回回数が複数でなければなりません。あなたは左端の真珠とこのような連鎖の一番右の真珠を接続する場合は、あなたはCharmBraceletを作ることができます。ただ、以下のPictrueのように、このCharmBraceletのサイクルは9であり、その周期カウントは2です。
現在、いくつかの一般的なブレスレットチェーンにCCをもたらした、彼はより多くのお金を節約することができるようにCharmBraceletsを作るために真珠の最小数を購入したいです。しかし、ブレスレットをリメイクするとき、彼は唯一の左端とチェーンの右端に色の真珠を追加することができ、それが中央に追加することは禁止され、言うことです。
CCは、彼のアイデアに満足して助けをお願いしています。
各テストケースは、唯一の行は、元の通常のチェーンをリメイクする記述が含まれています。文字列の各文字は1つの真珠の略で、「」〜「Z」の文字によって記述されている真珠の26種類があります。ストリングレンの長さ:(3 <=レン<= 100000)。
#include <cstdioを> する#include <iostreamの> する#include < ストリング > の#include <CStringの> 使用して 名前空間STD; typedefの長い ロングLL; のconst int型 N = 1E6の+ 7。; CHAR ARR [N]; LL NXT [N]; // abcdefabcdefab // 全長N NXTを引い[N-1]のループ部の最短の長さである INT のmain(){ int型T; scanfの(" %のD "、&T)、 一方(T-- ){ scanfの(" % S "、ARR)。 LL N = STRLEN(ARR)。 用(LL i = 1 ; iがn <; Iは++ ){ LL J = NXT [I- 1 ]。 一方、(!ARR [I] = ARR [J] && J> 0)J = NXT [J- 1 ]。 もし(ARR [I] == ARR [J])J ++ ; NXT [I] = jは、 } INT LEN = N-NXT [N- 1 ]。 もし(LEN == N)のprintf(" %Dを\ n " 、LEN)。 そう であれば(N%LEN == 0 ){ プット(" 0 " ); } 他のprintf(" %d個の\ n "、lenの-Nの%のLEN)。 } 戻り 0 。 }