1. 程式人生 > >hust 1010 The Minimum Length(循環節)【KMP】

hust 1010 The Minimum Length(循環節)【KMP】

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】