题目链接:http://acm.hust.edu.cn/problem/show/1010
求循环节裸题
#include <stdio.h>
#include<cstring>
using namespace std;
char b[1000010];
int nxt[1000010];
int lb;
void gnx(){
nxt[0]=-1;
int i=0,j=-1;
while(i<lb){
if(j==-1||b[i]==b[j])nxt[++i]=++j;
else j=nxt[j];
}
}
int main(void)
{
while(~scanf("%s",b)){
lb=strlen(b);
gnx();
printf("%d\n",lb-nxt[lb]);
}
return 0;
}

本文介绍了一道ACM竞赛中的经典题目——求循环节。通过C语言实现了一个高效的算法来找出给定字符串的循环节长度。使用了KMP算法的思想进行预处理,通过next数组快速定位重复模式。
104

被折叠的 条评论
为什么被折叠?



