当前位置: 代码迷 >> 综合 >> Period HDU - 1358(kmp循环节)喝水,喝水,我爱喝水
  详细解决方案

Period HDU - 1358(kmp循环节)喝水,喝水,我爱喝水

热度:11   发布时间:2024-02-26 10:22:37.0

Period HDU - 1358

题意&&思路:

基本和uva那道eg题一模一样。

Period UVA - 1328

AC

#include <iostream>
#include <cstring>
using namespace std;
const int maxm=1e6+10;
char p[maxm];
int m, nxt[maxm];
void getnxt(){
    int i=0, j=-1;nxt[0]=-1;while(i<m){
    if(j==-1||p[i]==p[j])nxt[++i]=++j;else j=nxt[j];}
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int kase=0;while(cin>>m&&m){
    cin>>p;getnxt();cout<<"Test case #"<<++kase<<endl;//1"for(int i=2; i<=m; i++){
    if(nxt[i]>0 && i%(i-nxt[i])==0)cout<<i<<' '<<i/(i-nxt[i])<<endl;}cout<<endl;}return 0;
}