链接:Miku
我的代码
-----------------------
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<map> using namespace std; char aim[1500001]; int nex[1500001]; int l; int main(){ while(scanf("%s",aim+1)&&aim[1]!='.'){ memset(nex,0,sizeof(nex)); l=strlen(aim+1); nex[1]=nex[0]=0; int j=0; for(int i=2;i<=l;++i){ while(j&&aim[i]!=aim[j+1]) j=nex[j]; if(aim[i]==aim[j+1]) j++; nex[i]=j; } if(l%(l-nex[l])==0) printf("%d ",l/(l-nex[l])); else{ printf("1 "); } } return 0; }