一.题目链接:
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;
}