poj 2406 Power Strings【kmp】
阿新 • • 發佈:2018-11-20
kmp,根據next陣列的性質如果有答案的話就是n/(n-(ne[n]+1)),否則是1
搬來打算用SA後來發現必須用DC3就沒寫
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=1000005; int n,ne[N]; char s[N]; int main() { while(scanf("%s",s)&&s[0]!='.') { n=strlen(s); ne[0]=-1; for(int i=1,j=-1;i<n;i++) { while(j!=-1&&s[i]!=s[j+1]) j=ne[j]; if(s[i]==s[j+1]) j++; ne[i]=j; } ne[n]=ne[n-1]+1; if(n%(n-ne[n])==0) printf("%d\n",n/(n-ne[n])); else puts("1"); } return 0; }