zoukankan      html  css  js  c++  java
  • E 最小的小号(bupt323)

    从位置i开始长为l的字符和从位置j开始长为l的字符串比较

    #include<iostream>
    #include<cstring>
    #define N 100005
    using namespace std;
    char s[N];
    int l,len;
    int scmp(int i,int j,int flg)
    {
    int k;
    if(flg==0)
    {
    for(k=0;k<l;k++)
    {
    if( s[(i+k)%len]<s[(k+j)%len]) return -1;
    else if(s[(i+k)%len]>s[(k+j)%len]) return 1;
    }
    return 0;
    }
    else
    {
    if( s[(i+l-1)%len]<s[(j+l-1)%len]) return -1;
    else if(s[(i+l-1)%len]>s[(j+l-1)%len]) return 1;
    else return 0;
    }
    }
    int main()
    {
    int t,i,temp,j,flg;
    cin>>t;
    while(t--)
    {
    cin>>s;l=0;
    len=strlen(s);
    i=0;j=1;l=1;
    flg=0;//两个字符串不相等flg=0;
    while(j<len&&l<len)
    {
    temp=scmp(i,j,flg);
    if(temp==0) { l++;flg=1;}
    else if(temp==1)
    {
    i=j;j++;
    flg=0;
    }else if(temp==-1)
    {
    if(flg==1)
    j+=l;
    else
    j++;
    flg=0;
    }
    }
    for(j=0;j<len;j++)
    {
    printf("%c",s[(i+j)%len]);
    }
    cout<<endl;
    }
    return 0;
    }
  • 相关阅读:
    随堂练习
    随堂练习
    第六次安卓作业
    第五次安卓
    第四次安卓
    第二次安卓
    安卓作业
    第十八次上机
    第七周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2397909.html
Copyright © 2011-2022 走看看