标签:
环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。例如,图3-4的环状串有10种表示:CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称为”最小表示”。
输入一个长度为n(n≤100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。
Input:
2
CTCC
CGAGTCAGCT
Output:
CCCT
AGCTCGAGTC
#include<cstdio> #include<cstring> #define maxn 105 char s[maxn]; bool less(const char * s,int p,int q,int n); int main(void) { int T; scanf("%d",&T); while(T--) { int ans = 0; scanf("%s",s); int n = strlen(s); for(int i = 1; i < n; i++) if(less(s,i,ans,n)) //比较从i位置和从ans位置开始的字符串字符大小 ans = i; //如果i位置开始的更小,则更新ans for(int i = 0; i < n; i++) putchar(s[(i+ans)%n]); putchar(‘\n‘); } return 0; } bool less(const char * s,int p,int q,int n) { for(int i = 0; i < n; i++) if(s[(i+p)%n] != s[(i+q)%n]) return s[(i+p)%n] < s[(i+q)%n];//判断p与q位置开始的字符大小 return 0; //两个字符串都相等的情况 }
标签:
原文地址:http://www.cnblogs.com/Muia/p/5721189.html