String Problem HDU - 3374

http://acm.hdu.edu.cn/showproblem.php?pid=3374

详解https://wenku.baidu.com/view/b0ef1be7a6c30c2258019ede.html

字符串最大最小表示法 求出起始位置

#include 
using namespace std;

int go[1000010];
int n;
char ch[1000010];

void kmp()
{
    int i,j;
    go[0]=-1;
    i=0,j=-1;
    while(i0) j+=(k+1);
               else i+=(k+1);
            }
            else
            {
                if(t>0) i+=(k+1);
                else j+=(k+1);
            }
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j)+1;
}

int main()
{
    int i,minn,maxx,l;
    while(scanf("%s",ch)!=EOF)
    {
        n=strlen(ch);
        kmp();
        minn=getmm(0);
        maxx=getmm(1);
        if(n%(n-go[n])==0) l=n/(n-go[n]);
        else l=1;
        printf("%d %d %d %d\n",minn,l,maxx,l);
    }
    return 0;
}

 

你可能感兴趣的:(KMP/拓展KMP)