0
点赞
收藏
分享

微信扫一扫

最小表示法

奋斗De奶爸 2022-01-08 阅读 61
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<string>
using namespace std;
int getmin(char *a,int n)
{
    int i=0,j=1,k=0;
    int t;
    //从i开始k长度和从j开始k长度的字符串作比较
    while(i<n&&j<n&&k<n)
    {
        t=a[(i+k)%n]-a[(j+k)%n];
        //t用来计算相应位置上那个字符字典序哪个大
        if(!t) //相等就下一个
        {
            k++;
        }
        else
        {
            if(t>0){i+=k+1;}
            //i位置大,最大表示法j+=k+1
            else{j+=k+1;}
            //j位置大,最大表示法i+=k+1
            if(i==j){j++;}
            k=0;
        }
    }
   if(i<j){return i;}
   else {return j;}
}
int main()
{
   int n;
   char a[500005];
   scanf("%d",&n);
   scanf("%s",a);
   int k=getmin(a,n);
   if(k==0)
   {
       printf("Yes\n");
   }
   else
   {
       printf("No\n");
   }
    return 0;
}

cf丑数

举报

相关推荐

0 条评论