BZOJ-1355: [Baltic2009]Radio Transmission (傻逼KMP)
阿新 • • 發佈:2017-11-05
size while 最小 bbs status ++ sample std log
Submit: 1046 Solved: 722
[Submit][Status][Discuss]
cabcabca
3
1355: [Baltic2009]Radio Transmission
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1046 Solved: 722
[Submit][Status][Discuss]
Description
給你一個字符串,它是由某個字符串不斷自我連接形成的。 但是這個字符串是不確定的,現在只想知道它的最短長度是多少.Input
第一行給出字符串的長度,1 < L ≤ 1,000,000. 第二行給出一個字符串,全由小寫字母組成.Output
輸出最短的長度Sample Input
8cabcabca
Sample Output
HINT
對於樣例,我們可以利用"abc"不斷自我連接得到"abcabcabc",讀入的cabcabca,是它的子串
Source
當 n%(n-next[n])==0 的時候 n-next[n] 就是當前字符串的最小循環節qwq 這性質好像laj在之前某篇博文裏證明過qwq
1 #include "bits/stdc++.h" 2 using namespace std; 3 typedef long long LL; 4 const int MAX=1e6+5; 5 char s[MAX]; 6 int len,next[MAX]; 7 void get_next(){8 int i,j; 9 j=next[0]=-1;i=0; 10 while (i<=len){ 11 if (j==-1 || s[i]==s[j]) next[++i]=++j; 12 else j=next[j]; 13 } 14 } 15 int main(){ 16 freopen ("radio.in","r",stdin);freopen ("radio.out","w",stdout); 17 int i,j; 18 scanf("%d\n%s",&len,s); 19 get_next();20 printf("%d",len-next[len]); 21 return 0; 22 }
BZOJ-1355: [Baltic2009]Radio Transmission (傻逼KMP)