【最小表示法】POJ 1509 Glass Beads

链接

http://poj.org/problem?id=1509

大意

给定一个环,让其在一定部分断开,使得断开的串的字典序最小

思路

最小表示法裸题(当然你也可以用 S A M

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int t;
char s[10011];
inline int MRA(register char a[],register int len)//求最小表示
{
    int i=0,j=1,k;
    while(i<len&&j<len&&k<len)
    { 
        if(a[(i+k)%len]==a[(j+k)%len]) k++;
        else
        if(a[(i+k)%len]>a[(j+k)%len])
        {
            i+=k+1;
            if(i==j) i++;
            k=0;
        }
        else
        {
            j+=k+1;
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j);
}
signed main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",s);
        printf("%d\n",MRA(s,strlen(s))+1);
    }
}

猜你喜欢

转载自blog.csdn.net/xuxiayang/article/details/81783196