zoukankan      html  css  js  c++  java
  • 字典序(摘)

    长度为n的环状串有n镇南关表示法,分别为从某个位置开始顺时针得到。在这些表示法中,字典序最小的称为“最小表示”。

    输入一个长度为n(n<=100)的环状DNA串(只包含A,C,G,T)的一种表示法,你的任务是输出该环状串的最小表示。例如,CTCC的最小表示是CCCT。

        字典序就是字符串在字典中的顺序。

        一般地,对于两个字符串,从第一个字符开始比较,当某一个位置的字符不同时,该位置字符较小的串,字典序较小。

        eg.  abc<bcd

              hi<his

              1247<125

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #define maxn 105
    int less(const char* s,int p,int q)          //环状串s的表示法p是否比表示法q的字典序小
    {
        int n=strlen(s);
        for(int i=0;i<n;i++)
            if(s[(p+i)%n]!=s[(q+1)%n])
                return s[(p+i)%n]<s[(q+i)%n];         //从s[p]开始和从s[q]开始的字符串逐一比较
        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=0;i<n;i++)
                if(less(s,i,ans))ans=i;
            for(int i=0;i<n;i++)
                putchar(s[(i+ans)%n]);
            putchar('
    ');
        }
        //system("pause");
        return 0;
    }


  • 相关阅读:
    iPhone 调用Web Service 例子(转)
    iPhone开发:在UIAlertView中显示进度条(转)
    Oracel 分页
    NYOJ 477
    NYOJ 108(数组中存的是前n个数的和)
    NYOJ 199
    NYOJ 311(完全背包)
    高效斐数(前92位)
    NYOJ 57(6174问题)
    NYOJ 546(分珠宝)
  • 原文地址:https://www.cnblogs.com/farewell-farewell/p/5199134.html
Copyright © 2011-2022 走看看