POJ P1509 Glass Beads

目录:


题目:

传送门


分析:

这个做法简单的来说用两个指针就是从头开始暴力比较,答案劣的就往后跳,跳到失配位的下一个,直到其中一个跳出这个串结束。
注意: 当两个指针位置相同的时候,把其中一个++。


代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>  
#include<cstdlib>
#include<algorithm>
#include<set>
#include<map>
#include<list>
#include<ctime>
#include<iomanip>
#include<string>
#include<bitset>
#define LL long long
#define seed 233
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}
char s[120001];
int len;
int n=read();
int min(int i,int j)
{
    return i<j? i:j;
}
int main()
{
    while(n--)
    {
        scanf("%s",s);
        len=strlen(s);
        for(int i=0;i<len;i++) s[len+i]=s[i];
        int i=0,j=1,k;
        while(i<len&&j<len)
        {
            for(k=0;k<len&&s[i+k]==s[j+k];k++);
            if(k>len) break;
            if(s[i+k]>s[j+k])
                i+=k+1;
            else
                j+=k+1;
            j+=(j==i);
        }
        printf("%d\n",min(i,j)+1);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_35786326/article/details/81783685