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

2017-07-15  本文已影响0人  Alan66

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

#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;  
}  
上一篇下一篇

猜你喜欢

热点阅读