传送门:HDU 3746
思路:next[len]>0&&len%(len-next[len])==0,str是周期串.题目要求加最少的珠子(xx),使串成为周期,即:使len%c+xx)==0,xx==(len-next[len])-len%(len-next[len);
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=100010;
int next[N];
char t[N];
/*
void getNext(int lt)
{
next[0]=-1;
int j=-1,i=0;
while(i<lt)
{
if(j==-1||t[i]==t[j])
next[++i]=++j;
else
j=next[j];
}
}*/
void getNext(int lt)
{
int i=0,j=-1;
next[0]=-1;
while(i<lt)
{
if(j==-1||t[i]==t[j])
next[++i]=++j;
else
j=next[j];
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
scanf("%s",t); //此处cin>>t;会狂WA!!,应该是卡时间,但也应该是TLE,太坑!
int lt=strlen(t);
getNext(lt);
int t=lt-next[lt];
if(next[lt]>0&<%t==0)
printf("0\n");
else
printf("%d\n",t-lt%t);
}
return 0;
}