Cyclic Nacklace HDU - 3746
# include <iostream>
const int maxn=100005;
char s[maxn];
int nexts[maxn];
void getNext(){
int j=0, k=-1;
nexts[0]=-1;
while(s[j]!='\0'){
while(k!=-1 && s[j]!=s[k])
k=nexts[k];
nexts[++j]=++k;
}
}
int main(){
using namespace std;
int t;
cin>>t;
while(t--){
cin>>s;
getNext();
int i, ans, len;
ans=len=(int)strlen(s);
i= nexts[len];
while(i!=-1){
int k=len-i;
int p=len%k;
int q=(k-p)%k;
if(len+q >= k*2)
ans=min(ans, q);
i= nexts[i];
}
cout << ans << endl;
}
return 0;
}
问题:kmp模板题,定义next数组会报错error: reference to ‘next’ is ambiguous, 换成nexts成功。