POJ-2406 Power Strings
阿新 • • 發佈:2018-11-24
POJ-2406 Power Strings
題解:
其實就是用next把模式串標記出來,然後用如果strlen(模式串)%(strlen(模式串)-next[strlen(模式串)])==0的話,說明這個模式串可以被幾個字串組合而成,而個數等於strlen(模式串)/(strlen(模式串)-next[strlen(模式串)])
程式碼:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int next[1000005]; void Next(char T[]) { int i=0,j=-1,l=strlen(T); next[0]=-1; while(i<l) { if(j==-1||T[j]==T[i])next[++i]=++j; else j=next[j]; } } int main() { char T[1000005]; while(scanf("%s",&T)!=EOF) { if(T[0]=='.')break; int l=strlen(T); Next(T); if(l%(l-next[l])==0)printf("%d\n",l/(l-next[l])); else printf("1\n"); } return 0; }