#P5637. Pku2406 Power Strings题解
Description
求一个字符串由多少个重复的子串连接组成,例如 abababababab 由 33 个 abab 连接而成,因此答案为 33
又例如 abcdabcd 由 11 个 abcdabcd 连接而成,因此答案为 11
Input
多组数据,每组数据,一行给出一个字符串 SS,∣S∣≤106∣S∣≤106
整个测试以 . 代表结束。
Output
每行一个整数,表示答案。
输入数据 1
abcd
aaaa
ababab
.
输出数据 1
1
4
3
思路
kmp
代码见下
#include<bits/stdc++.h>
using namespace std;
long long t,kmp[10000006],as,bs,op=0,db=0;
char a[10000006],b[10000006];
int main(){
while(cin>>b+1){
if(b[1]=='.'){
break;
}
db=1;
bs=strlen(b+1);
for(int i=2,j=0;i<=bs;i++){
while(j!=0&&b[i]!=b[j+1]){
j=kmp[j];
}
if(b[j+1]==b[i]){
j++;
}
kmp[i]=j;
}
for(int i=0;i<=bs;i++){
b[i]=' ';
}
if(bs%(bs-kmp[bs])==0){
db=bs/(bs-kmp[bs]);
}
op=0;
cout<<db<<endl;
}
return 0;
}

浙公网安备 33010602011771号