首页 > 学院 > 开发设计 > 正文

Bzoj 1355: [Baltic2009]Radio Transmission(kmp)

2019-11-11 05:35:39
字体:
来源:转载
供稿:网友

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; } PRintf("%d",l1-next[l1]);}int main(){ scanf("%d",&l1); scanf("%s",s+1); kmp(); return 0;}
上一篇:深入浅出Nodejs读书笔记

下一篇:syncqueuq

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表