bzoj1355——2016——3——15
傳送門(mén):http://www.lydsy.com/JudgeOnline/problem.php?id=1355
題目大意:
1355: [Baltic2009]Radio Transmission
Time Limit:?10 Sec??Memory Limit:?64 MB
Submit:?591??Solved:?390
[Submit][Status][Discuss]
Description
給你一個(gè)字符串,它是由某個(gè)字符串不斷自我連接形成的。 但是這個(gè)字符串是不確定的,現(xiàn)在只想知道它的最短長(zhǎng)度是多少.
Input
第一行給出字符串的長(zhǎng)度,1 < L ≤ 1,000,000. 第二行給出一個(gè)字符串,全由小寫(xiě)字母組成.
Output
輸出最短的長(zhǎng)度
Sample Input
8
cabcabca
Sample Output
3
HINT
對(duì)于樣例,我們可以利用"abc"不斷自我連接得到"abcabcabc",讀入的cabcabca,是它的子串
Source
題解:這題就是KMP next數(shù)組的應(yīng)用啦(水),最小值就是n-next[n](很容易想吧,因?yàn)榭尚薪饧癁閧n-next[n],n-next[next[n]]....)所以最小解顯然為n-next[n];
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #define inf 0x7fffffff
5 int n,ans;
6 int next[1000100];
7 char s[1000100];
8 using namespace std;
9 int main()
10 {
11 scanf("%d",&n);
12 scanf("%s",s+1);
13 ans=0;
14 int fix=0;
15 for (int i=2; i<=n; i++)
16 {
17 while (fix && s[fix+1]!=s[i]) fix=next[fix];
18 if (s[fix+1]==s[i]) fix++;
19 next[i]=fix;
20 }
21 printf("%d\n",n-next[n]);
22 }
View Code
?
轉(zhuǎn)載于:https://www.cnblogs.com/HQHQ/p/5280425.html
總結(jié)
以上是生活随笔為你收集整理的bzoj1355——2016——3——15的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在 Mac上压缩的压缩包 在window
- 下一篇: 【学习周报】