码迷,mamicode.com
首页 > 其他好文 > 详细

字典序

时间:2016-07-30 18:18:03      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

环状序列(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: 

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;    //两个字符串都相等的情况 
}
View Code

 

字典序

标签:

原文地址:http://www.cnblogs.com/Muia/p/5721189.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!