https://vjudge.net/contest/192890#problem/B
题意: 问你循环节长度。
思路:还是nex数组的简单应用,首先要是有循环节的话就直接输出len-nex[len],没有就输出len 水题(天天也就能刷刷水题了 T _ T)..
上代码吧:
#include <stdio.h>
#include <string.h>
char ch[1000];
int nex[1000];
void pre_kmp()
{
memset(nex,0,sizeof(nex));
int len = strlen(ch) , i = 0 , k = -1;
nex[0] = -1;
while(i<len)
{
if(k == -1 ||ch[i] == ch[k])
{
i++,k++;
nex[i] = k;
}
else
{
k = nex[k];
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",ch);
int len = strlen(ch);
pre_kmp();
if(len % (len - nex[len])==0)
{
printf("%d\n",len-nex[len]);
}
else
{
printf("%d\n",len);
}
if(t)
{
puts("");
}
}
}
/*2
abcabcabc
HoHoHo*/