KMP:【BZOJ1355】【Baltic2009】Radio Transmission
2018-01-19 22:21
323 查看
Description
给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少。Input
第一行给出字符串的长度,1<L≤1,000,0001<L≤1,000,000. 第二行给出一个字符串,全由小写字母组成。Output
输出最短的长度。SampleInput
8 cabcabca
SampleOutput
3
Hint
对于样例,我们可以利用”abc”不断自我连接得到”abcabcabc”,读入的cabcabca,是它的子串。首先让我们来研究一下结果的含义。
不妨设结果为串T
4000
T。 则原串为:
我们怎样利用起KMP中的nxt数组呢?
由于TT串是最小循环子串,所以可以标出KMP中nxt[n]nxt[n](n为|A||A|)为:
结果为n-nxt
!但是为什么呢?
如果T不是最小循环子串的话,nxt
必定还可以再加长。
否则,nxt[n]nxt[n]若再往左边扩展,不妨设增长的为T2T2,剩下的T1T1,分两种情况讨论。
1.|T1|>=|T2||T1|>=|T2|
将两个串对齐可得:
若两串匹配,则显然可得T2T2是T1T1的前缀,即T1=T2+RT1=T2+R,且RR也是T1T1的前缀,余下的为T2T2,即T1=R+T2T1=R+T2,则显然T1T1是比TT更小的循环子串,与前设矛盾,
故两串必定不匹配。
2.|T1|<|T2||T1|<|T2|
将两个串对齐可得:
同理。
若两串匹配,则显然可得T1T1是T2T2的前缀,即T2=T1+RT2=T1+R,且RR也是T2T2的前缀,余下的为T1T1,即T2=R+T1T2=R+T1,则显然T2T2是比TT更小的循环子串,与前设矛盾,
故两串必定不匹配。
这样一来,我们就证明了答案为n−nxt[n]n−nxt[n]!然后就可以直接套KMP模板了。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int nxt[1000001],n; char a[1000001]; int main(){ scanf("%d%s",&n,a); int k=0; for(int i=2;i<=n;i++){ while(k&&a[k]!=a[i-1])k=nxt[k]; if(a[k]==a[i-1])k++; nxt[i]=k; } printf("%d\n",n-nxt ); }
相关文章推荐
- [BZOJ1355][Baltic2009]Radio Transmission(kmp)
- 【bzoj1355】[Baltic2009]Radio Transmission KMP
- BZOJ 1355 [Baltic2009]Radio Transmission Hash/KMP
- BZOJ 1355: [Baltic2009]Radio Transmission( kmp )
- [BZOJ1355][Baltic2009][KMP]Radio Transmission
- [bzoj1355][Baltic2009]Radio Transmission_KMP
- BZOJ 1355: [Baltic2009]Radio Transmission KMP
- 【bzoj1355】【Baltic2009】【Radio Transmission】【kmp】
- BZOJ 1355 [Baltic2009]Radio Transmission KMP
- 【 bzoj 1355 】 [Baltic2009]Radio Transmission - KMP
- Bzoj 1355: [Baltic2009]Radio Transmission(kmp)
- 【bzoj 1355】[Baltic2009]Radio Transmission(kmp)
- bzoj 1355: [Baltic2009]Radio Transmission【kmp】
- 【BZOJ1355】【Baltic2009】Radio Transmission 详细证明【KMP】
- BZOJ 1355: [Baltic2009]Radio Transmission [KMP 循环节]
- [Bzoj1355][Baltic2009]Radio Transmission(KMP)
- bzoj1355: [Baltic2009]Radio Transmission(kmp求循环节)
- 【bzoj 1355】 [Baltic2009]Radio Transmission(kmp)
- [bzoj 1355--Baltic2009]Radio Transmission
- [BZOJ1355] [Baltic2009]Radio Transmission