字符串长度<10^9查询字符串由最多多少个相同的子串重复连接构成。例如abcdabcdabcd,最多由3个abcd构成。
输入
abcdabcdabcd
输出
3
#include<bits/stdc++.h>
using namespace std;
unsigned long long h[1000005],base=131;
char s[1000005];
int main(){
cin>>s;
int len=strlen(s);
for(int i=0;i<len;i++){ //放在下标1的位置开始
h[i+1]=h[i]*base+s[i];
}
for(int i=1;i<=len;i++){ //枚举子串长度
if(len%i==0){ //abcdabcdabcd
unsigned long long t=h[i];
int j;
cout<<"-------------"<<endl;
for(j=i;j+i<=len;j+=i){
cout<<t<<" "<<h[j+i]-h[j]*pow(base,i)<<endl;
if(t!=h[j+i]-h[j]*(unsigned long long)pow(base,i)){
break;
}
}
if(j==len){
cout<<len/i;
return 0;
}
}
}
return 0;
}