BZOJ 1355 Baltic2009 Radio Transmission KMP算法

来源:互联网 发布:windows ce6.0怎么安装 编辑:程序博客网 时间:2024/05/11 15:03

题目大意:给定一个字符串,求最小循环节(可以不整除)

样例的Hint是错的无视掉就好 循环节应该是cab

这题利用了KMP中next数组的性质,也就是n-next[n]表示循环节

POJ的题都要求整除,这题不用整除,直接输出n-next[n]即可

注意next数组不要开成char~

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define M 1001001using namespace std;int n,next[M];char s[M];void KMP(){int i,fix=0;for(i=2;s[i];i++){while( fix && s[fix+1]!=s[i] )fix=next[fix];if( s[fix+1]==s[i] )fix++;next[i]=fix;}}int main(){scanf("%d",&n);scanf("%s",s+1);KMP();printf("%d\n",n-next[n]);}


0 0
原创粉丝点击