一.题目链接:

Circular Sequence UVA-1584

二.题目大意:

给定一个只含 A , T , C , G 的环形字符串,输出其字典序最小的字符串.

三.分析:

例如CTCC,则根据字典序最小可以写成CCCT.

注意该字符串是环形的,所以应该想到在字符串处理上使用 "%" 运算.

由此,我们只需要找出取余点即可.

那么,就枚举一遍取余点喽,把字典序最小的取余点记录下来.

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <ctime>
#include <stack>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 0.000001
#define PI acos(-1.0)
#define ll long long int
using namespace std;

bool dote(char *s, int p, int q)
{
    int len = strlen(s);
    for(int i = 0; i < len; ++i)
    {
        if(s[(i + p) % len] != s[(i + q) % len])
            return s[(i + p) % len] < s[(i + q) % len];
    }
    return 0;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int ans = 0;
        char s[110];
        scanf("%s", s);
        int len = strlen(s);
        for(int i = 0; i < len; ++i)
        {
            if(dote(s, i, ans))
                ans = i;
        }
        for(int i = 0; i < len; ++i)
            printf("%c", s[(i + ans) % len]);
        printf("\n");
    }
    return 0;
}