Cyclic Nacklac
题目链接:点击打开链接
题意:给你一个串,求循环节;
思路:利用next数组性质来求循环节;
代码:
#include<string.h>
#include<stdio.h>
using namespace std;
char p[100010];
int nextk[100100]={0};
int n;
void makenext()
{
int i=1,j=0;
nextk[0]=-1;
while(i<n)
{
if(j==-1||p[i]==p[j])
{
j++,i++;
nextk[i]=j;
}
else
j=nextk[j];
}
}
int main()
{
int t,m;
scanf("%d",&t);
while(t--)
{
m=0;
scanf("%s",&p);
n=strlen(p);
makenext();
<span style="white-space:pre"> </span> m=n-nextk[n];
int y=(m-(n%m))%m;
if(y==0&&m/n==1) y+=n;
printf("%d\n",y);
<span style="white-space:pre"> </span>}
return 0;
}