Circular Sequence UVA - 1584  环状序列

题目链接

长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。

Circular Sequence UVA - 1584  环状序列_第1张图片

例如,图3-4的环状串有10种表示:
CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称为"最小表示"。输入一个长度为n(n≤100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。例如,CTCC的最小表示是CCCT,CGAGTCAGCT的最小表示为AGCTCGAGTC。

#include 
#include 
const int N = 105;
char s[N];

bool less(int idx, int ans, int len){
	for(int i = 0; i < len; i++){
		int p = (idx+i)%len, q = (ans+i)%len;
		if(s[p] != s[q]) return s[p] < s[q];
	}
	return false; //相等,不需要修改 
}

int main() {
	int t;
	scanf("%d",&t);
	while( t--){
		scanf("%s", &s);
		int len = strlen(s), ans = 0;
		for(int i = 1; i < len; i++){
			if(less( i, ans, len)) ans = i;
		}
		for(int i = 0; i < len; i++)
			putchar( s[(ans+i)%len]);
		putchar('\n');
	}
	return 0;
}

 

你可能感兴趣的:(算法竞赛入门经典(第二版))