HDU 3746 Cyclic Nacklace
题意
给你一个字符串,让这个字符串变成一个至少有两个循环节的字符串,问至少添加几个字符,添加字符只能在头部和尾部添加不能在中间添加(这是个环)。
裸KMP求最小循环节。
const int N=1e5+10;
char s[N];
int ne[N];
int n;
void init()
{
for(int i=2,j=0;i<=n;i++)
{
while(j && s[i] != s[j+1]) j=ne[j];
if(s[i] == s[j+1]) j++;
ne[i]=j;
}
}
int main()
{
ios;
int T;
cin>>T;
while(T--)
{
cin>>s+1;
n=strlen(s+1);
init();
int cir=n-ne[n];
if(cir != n && n % cir == 0) cout<<0<<endl; //要求至少存在两个循环节。
else cout<<cir-n%cir<<endl;
}
//system("pause");
}