//长度为n的环状串有n种表示方法,分别为从某个位置开始顺时针得到的。
//字典序最小的称为最小表示
//输入一个长度为n的环状DNA串(只含A,C,G,T)这四种字符
//输出该串的最小表示
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 105
int main()
{
int n;
int length;
char string[MAXN];
char min[MAXN];
char trans[MAXN*2];
scanf("%d",&n);
while(n--){
scanf("%s",string);
strcpy(min,string);
length=strlen(string);
for(int i=1;i<=length-1;i++){
strcpy(trans,string+i);
strcpy(trans+length-i,string);
trans[length]='\0';
if(strcmp(trans,min)<0)
strcpy(min,trans);
}
puts(min);
}
return 0;
}
/*
// UVa1584(LA3225) Circular Sequence
// Rujia Liu
#include<stdio.h>
#include<string.h>
#define maxn 105
// 环状串s的表示法p是否比表示法q的字典序小
int less(const char* s, int p, int q) {//思路好!!!
int n = strlen(s);
for(int i = 0; i < n; i++)
if(s[(p+i)%n] != s[(q+i)%n])
return s[(p+i)%n] < s[(q+i)%n];
return 0; // 相等
}
int main() {
int T;
char s[maxn];
scanf("%d", &T);
while(T--) {
scanf("%s", s);
int ans = 0;
int n = strlen(s);
for(int i = 1; i < n; i++)
if(less(s, i, ans)) ans = i;
for(int i = 0; i < n; i++)
putchar(s[(i+ans)%n]);//用的好,大致思路可以相当于以前题目location=(location+1)%n;
putchar('\n');
}
return 0;
}
*/
UVa 1584 Circular Sequence(环状序列)
最新推荐文章于 2023-12-03 14:43:14 发布