poj 2046

来源:互联网 发布:钢材进销存软件免费版 编辑:程序博客网 时间:2024/06/15 21:39
#include<iostream>  #include<algorithm>  #include<cstdio>  #include<cstring>  using namespace std;    #define MAXN 1000010    char pattern[MAXN];  int next[MAXN];    void getNext(){     int m = strlen(pattern);     next[0] = next[1] = 0;     for(int i = 1 ; i < m ; i++){        int j = next[i];        while(j && pattern[i] != pattern[j])           j = next[j];        next[i+1] = pattern[i] == pattern[j] ? j+1 : 0;     }     int cir = m-next[m];     if(m%cir == 0)/*刚好由n个最小循环节组成*/       printf("%d\n" , m/cir);     else/*否则都是输出1*/       printf("1\n");  }    int main(){     while(gets(pattern)){        if(!strcmp(pattern , "."))          break;        getNext();     }     return 0;  }  

0 0
原创粉丝点击