hust 1010 The Minimum Length(循環節)【KMP】
阿新 • • 發佈:2018-10-02
col color mini sin length 就是 problem 一個 ext
<題目鏈接>
題目大意:
有一個字符串A,一次次的重寫A,會得到一個新的字符串AAAAAAAA.....,現在將這個字符串從中切去一部分得到一個字符串B,例如有一個字符串A="abcdefg".,復制幾次之後得到abcdefgabcdefgabcdefgabcdefg....,現在切去中間紅色的部分,得到字符串B,現在只給出字符串B,求出字符串A的長度。
解題分析:
不難發現,本題A的定義其實就是字符串中最短循環節的定義,所以直接用KMP求出B字符串中的循環節即可。
#include <cstdio> #include <cstring> #include<algorithm> using namespace std; const int M =1e6+7; char s[M]; int nxt[M]; void getnext(){ int i=0,j=-1; nxt[0]=-1; while(s[i]){ if(j==-1||s[i]==s[j]) nxt[++i]=++j; else j=nxt[j]; } } int main(){ while(gets(s)){ getnext(); int len=strlen(s);int res=len-nxt[len]; printf("%d\n",res); } return 0; }
2018-10-02
hust 1010 The Minimum Length(循環節)【KMP】