题目链接:
http://poj.org/problem?id=2406
给你一个字符串,让你求它可以表示成最多几个字符串的重复,求循环节裸题
不能整除就为1,能整除就是len/t;
#include <stdio.h>
#include<cstring>
using namespace std;
char b[1000100];
int nxt[1000100];
int lb;
void gnx(){
int i=0,j=-1;
nxt[0]=-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)){
if(b[0]=='.')break;
lb=strlen(b);
gnx();
int t=lb-nxt[lb];
printf("%d\n",lb%t?1:lb/t);
}
return 0;
}

本文介绍了一种解决字符串循环节问题的方法,通过KMP算法预处理得到next数组,进而求解给定字符串可以由多少个子串重复构成。若长度不可整除,则循环节为1;若可整除,则循环节为字符串长度除以该重复子串的长度。
629

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



