【模版】最小表示法

来源:互联网 发布:tk的域名 编辑:程序博客网 时间:2024/05/21 05:44

最小表示法:n个字符的环状字符串,求长度为n的字典序Min的字符串。
http://blog.csdn.net/zy691357966/article/details/39854359

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int T;char s[20005];int MinR(){    int l=strlen(s+1);    for(int i=l+1;i<=l+l;i++) s[i]=s[i-l];    int i=1,j=2,k;    while(i<=l&&j<=l){        k=0;        while(s[i+k]==s[j+k]&&k<l) k++;        if(k==l) return min(i,j);        if(s[i+k]>s[j+k])             if(i+k+1>j) i=i+k+1;            else i=j+1;        else             if(j+k+1>i) j=j+k+1;            else j=i+1;    }    if(i<=l) return i;    else return j;}int main(){    freopen("in.txt","r",stdin);    freopen("out.txt","w",stdout);    scanf("%d",&T);    while(T--){        scanf("%s",s+1);        printf("%d\n",MinR());    }    return 0;}
0 0
原创粉丝点击