美文网首页
ZOJ 1729 & ZOJ 2006(最小表示法模板题)

ZOJ 1729 & ZOJ 2006(最小表示法模板题)

作者: Alan66 | 来源:发表于2017-07-15 00:05 被阅读0次

    输出每个字符串的最小字典序字串的下标!

    #include <cstdio>  
    #include <cstring>  
    #include <iostream>  
    #include <algorithm>  
    using namespace std;  
    const int maxn = 200017;  
    char str[maxn], tmp[maxn];  
    //最小表示法  
    int len;  
    int get_minstring(char *s)  
    {  
        int len = strlen(s);  
        int i = 0, j = 1, k = 0;  
        while(i<len && j<len && k<len)  
        {  
            int t=s[(i+k)%len]-s[(j+k)%len];  
            if(t==0)  
                k++;  
            else  
            {  
                if(t > 0)  
                    i+=k+1;  
                else  
                    j+=k+1;  
                if(i==j) j++;  
                k=0;  
            }  
        }  
        return min(i,j);  
    }  
    int main()  
    {  
        int t;  
        int len;  
        scanf("%d",&t);  
        while(t--)  
        {  
            scanf("%d",&len);  
            scanf("%s",str);  
            int ans = get_minstring(str);  
            printf("%d\n",ans+1);  
        }  
        return 0;  
    }  
    

    相关文章

      网友评论

          本文标题:ZOJ 1729 & ZOJ 2006(最小表示法模板题)

          本文链接:https://www.haomeiwen.com/subject/rwqahxtx.html