1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec Memory Limit: 64 MB Description 給你一個字符串,它是由某個字符串不斷自我連接形成的。 但是這個字符串是不確定的,現在只想知道它的最短長度是多少. Input 第一行給出字符串的長度,1 < L ≤ 1,000,000. 第二行給出一個字符串,全由小寫字母組成. Output 輸出最短的長度 Sample Input 8 cabcabca Sample Output 3 HINT 對于樣例,我們可以利用”abc”不斷自我連接得到”abcabcabc”,讀入的cabcabca,是它的子串
/*kmp.找循環節n-next[n].只能感性的認識.先記住吧. 不會證明orz.*/#include<iostream>#include<cstdio>#define MAXN 1000001using namespace std;int l1,ans,next[MAXN];char s[MAXN];int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar(); return x*f;}void kmp(){ int p=0; for(int i=2;i<=l1;i++) { while(p&&s[i]!=s[p+1]) p=next[p]; if(s[i]==s[p+1]) p++; next[i]=p; }新聞熱點
疑難解答