poj 1961 Period 把主串的每一種前綴當作小主串,如果小主串的子串在小主串中疊加次數大於1,輸出小主串長度及疊加次數。
阿新 • • 發佈:2017-11-12
include fin nbsp ase per ces proc 大於 ++
- #include<stdio.h>
- #define M 1000010
- int i,n,next[M];
- char s[M];
- void getNext()
- {
- int j=-1;
- next[0]=-1;
- for(i=1;s[i];i++){
- while(j!=-1&&s[j+1]!=s[i])j=next[j];
- if(s[j+1]==s[i])j++;
- next[i]=j;
- }
- }
- int main()
- {
- int k=0;
- while(scanf("%d",&n),n){
- scanf("%s",s);
- printf("Test case #%d\n",++k);
- getNext();
- for(i=1;i<=n;i++)
- if(i%(i-next[i-1]-1)==0&&next[i-1]>-1)
- printf("%d %d\n",i,i/(i-next[i-1]-1));
- puts("");
- }
- return 0;
- }
poj 1961 Period 把主串的每一種前綴當作小主串,如果小主串的子串在小主串中疊加次數大於1,輸出小主串長度及疊加次數。