首页 > 代码库 > HDU 1358
HDU 1358
http://acm.hdu.edu.cn/showproblem.php?pid=1358
求某个前缀的周期,用Next求循环节的题目
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std ; char B[1000005] ; int Next[1000005],lenB ; void GetNext() { int i,j ; Next[1]=j=0 ; for(i=2 ;i<=lenB ;i++) { while(j>0 && (B[j+1]!=B[i]))j=Next[j] ; if(B[j+1]==B[i])j++ ; Next[i]=j ; } } int main() { int cas=1 ; while(scanf("%d",&lenB),lenB) { scanf("%s",B+1) ; GetNext() ; printf("Test case #%d\n",cas++) ; for(int i=2 ;i<=lenB ;i++) { if(i%(i-Next[i])==0 && Next[i]) printf("%d %d\n",i,i/(i-Next[i])) ; } putchar(‘\n‘) ; } return 0 ; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。