题解 UVA1584 【Circular Sequence】

sss7020

2018-06-21 12:53:22

题解

代码比较简洁。说一个东西:

我谷难道没有人会用黑科技(也不算黑)

用sort()排字符串数组(string数组,c++)就是按字典序排的(系统已重载运算符),所以一个sort就搞定了!

老规矩:先上代码,再说废话:

#include<iostream>
#include<string>
#include<algorithm>
//sort必备
using namespace std;
int main(){
    string s;
    int kase,k;
    cin>>kase;
    while(kase--){//循环开始了
        cin>>s;//输入字符串
        string st[105];
        //为节省空间,系统将string类默认为空串
        for(k=0;k<s.length();k++){
            //k是代表从哪个字符开始读
            for(int i=k;i<k+s.length()/*循环s.lenth()次*/;i++){
                st[k]+=s[i%s.length()];
                //字符串往后填几个字符串
                //+运算符的用法:
                //看我题解:
                //https://www.luogu.org/blog/winnerking1412/solution-uva455
            }
        }
        sort(st,st+s.length());
        //排序
        cout<<st[0]<<endl;//输出第一个字符串
    }
    return 0;
}

废话来了!

方法:用%模拟环形

不具体是不是?听我慢慢跟你说。

要是用%的话,那么s.lenth()位就是第0位

s.lenth()%s.lenth()==0

懂了吧(没懂跟我私信)

具体方法:

首先,用k作从哪一位开始数形成的环形,用%模拟环形,并将字符一个一个存入数组中对应字符串中,最后将数组排序,输出第一个(也就是经排序后最小的(已经改变数组)),然后再输入一个字符串,直到EOF。

听懂了就好,没听懂也可以跟我私信