POJ1961 KMP算法

POJ1961

问题重述:

输入一个长度为l的字符串S,求所有S的由字串重复排列而成的前缀,并输出前缀的长度以及该前缀的最大重复度。

AC代码:

 //Memory: 5700K        Time: 641MS
 #include <iostream>
 #include <cstring>
 #include <string>

 using namespace std;

 ;

 int prefix[maxn];
 string s;

 void init()
 {
     int l = s.size();
     memset(prefix, , sizeof(prefix));
     ;
     ; i <= l; i++) {
          && s[k] != s[i - ])
             k = prefix[k];
         ])
             k++;
         prefix[i] = k;
     }
 }

 int main()
 {
     int n;
     ;
     while (cin >> n && n) {
         cin >> s;
         init();
         int l = s.size();
         cout << "Test case #" << case_num++ << endl;
         ; k <= l; k++) {
              && k % (k - prefix[k]) == ) {
                 cout << k << " " << k / (k - prefix[k]) << endl;
             }
         }
         cout << endl;
     }
     ;
 }
上一篇:Python QT由登陆界面到主界面


下一篇:HDU7106 Function(三分)