标签:

3 aaa abca abcde
0 2 5
循环节有关问题的证明 循环节有关问题传送门
题意:要把一个手镯凑成大于等于两个的循环,问最少需要添加几个珠子
思路:求一下最小循环节,然后看看是否是整数个循环,不是的话就差几个就补几个 最小循环节 t = len-next[len]
#include <stdio.h>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
char s[100009];
int nt[100009];
void getnext(int len)
{
int k=-1;int j=0;
nt[0]=-1;
while(j<len)
{
if(k<0 || s[k]==s[j])
nt[++j]=++k;
else
k=nt[k];
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
int len=strlen(s);
getnext(len);
if(nt[len]==0)
{
printf("%d\n",len);
continue;
}
// for(int i=0;i<=len;i++)
// cout<<next[i]<<" ";
int t=len-nt[len];
if(len%t==0)
{
puts("0");
continue;
}
t=t-len%t;
printf("%d\n",t);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu 3746 Cyclic Nacklace KMP循环节问题
标签:
原文地址:http://blog.csdn.net/wust_zjx/article/details/47444029