Power Strings
Posted fangbozhen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Power Strings相关的知识,希望对你有一定的参考价值。
题目描述
给出一个字符串,求它最多由多少个相同的字符串重复链接形成。
思路
其实题目就是要我们求出最小循环节的长度,再用字符串长度除以这个长度就是答案。求最小循环节显然用KMP就可以,但这里我们也可以用字符串Hash做。我们只需要暴力枚举每一个前缀的Hash值,再看之后每一段的Hash值是否等于它即可。
代码
#include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; const ull p=47; ull sum[1000005],power[1000005]; char s[1000005]; int main() power[0]=1; for(int i=1;i<1000000;i++) power[i]=power[i-1]*p; while(~scanf(" %s",s+1)) if(s[1]==‘.‘)break ; int len=strlen(s+1); for(int i=1;i<=len;i++) sum[i]=sum[i-1]*p+s[i]; for(int i=1;i<=len;i++) if(len%i==0) ull s1=sum[i]; bool f=1; // cout<<i<<‘ ‘<<s1<<endl; for(int j=i;j<=len-i;j+=i) if(s1!=sum[j+i]-sum[j]*power[i])f=0;break ; if(f||i==len)printf("%d\n",len/i);break ; return 0;
以上是关于Power Strings的主要内容,如果未能解决你的问题,请参考以下文章