1355: [Baltic2009]Radio Transmission
生活随笔
收集整理的這篇文章主要介紹了
1355: [Baltic2009]Radio Transmission
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Time Limit:?10 Sec??Memory Limit:?64 MB
Submit:?958??Solved:?659
[Submit][Status][Discuss]
cabcabca
Submit:?958??Solved:?659
[Submit][Status][Discuss]
Description
給你一個(gè)字符串,它是由某個(gè)字符串不斷自我連接形成的。 但是這個(gè)字符串是不確定的,現(xiàn)在只想知道它的最短長(zhǎng)度是多少.Input
第一行給出字符串的長(zhǎng)度,1 < L ≤ 1,000,000. 第二行給出一個(gè)字符串,全由小寫字母組成.Output
輸出最短的長(zhǎng)度Sample Input
8cabcabca
Sample Output
3HINT
對(duì)于樣例,我們可以利用"abc"不斷自我連接得到"abcabcabc",讀入的cabcabca,是它的子串
Source
?
KMP算法的裸題
答案=L-P[L];
?
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<cstring> 6 #include<algorithm> 7 using namespace std; 8 const int MAXN=1000010; 9 void read(int &n) 10 { 11 char c='+';int x=0;bool flag=0; 12 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;} 13 while(c>='0'&&c<='9')x=x*10+c-48,c=getchar(); 14 n=flag==1?-x:x; 15 } 16 char a[MAXN]; 17 int p[MAXN]; 18 int l=0; 19 void getp() 20 { 21 int j=0; 22 for(int i=1;i<l;i++) 23 { 24 while(a[i]!=a[j]&&j>0) j=p[j-1]; 25 if(a[i]==a[j])j++; 26 p[i]=j; 27 } 28 printf("%d",l-p[l-1]); 29 } 30 int main() 31 { 32 int meiyong;read(meiyong); 33 scanf("%s",a); 34 l=strlen(a); 35 getp(); 36 return 0; 37 }?
總結(jié)
以上是生活随笔為你收集整理的1355: [Baltic2009]Radio Transmission的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cocos2d-x 3.0final 终
- 下一篇: 多个线程直接按对数据进行操作容易引发线程