zoukankan      html  css  js  c++  java
  • POJ1007DNA Sorting

    转载请注明出处:優YoU    http://user.qzone.qq.com/289065406/blog/1309425334

     

    大致题意:

    输入m个长度为nDNA序列,把他们按照逆序数从小到大稳定排序输出。

    PS:“稳定排序”就是当序列中出现A1==A2时,排序前后A1A2的相对位置不发生改变。

     

    解题思路:

    没难度,先求各个字符串的逆序数,再按逆序数对字符串快排,用qsort()函数。

    虽然快排不是稳定的排序,但是只要在定义排序规则函数cmp做适当处理,a==b时返回0,即不处理ab,就不会改变他们之间的相对位置了。

     

     

     1 //Memory Time 
    2 //252K 16MS
    3
    4 #include<iostream>
    5 #include<algorithm>
    6 using namespace std;
    7
    8 typedef class dna
    9 {
    10 public:
    11 int num; //逆序数
    12 char sq[110]; //DNA序列
    13 }DNAStr;
    14
    15 int InversionNumber(char* s,int len)
    16 {
    17 int ans=0; //s逆序数
    18 int A,C,G; //各个字母出现次数,T是最大的,无需计算T出现次数
    19 A=C=G=0;
    20 for(int i=len-1;i>=0;i--)
    21 {
    22 switch(s[i])
    23 {
    24 case 'A':A++;break; //A是最小的,无逆序数
    25 case 'C':
    26 {
    27 C++;
    28 ans+=A; //当前C后面出现A的次数就是这个C的逆序数
    29 break;
    30 }
    31 case 'G':
    32 {
    33 G++;
    34 ans+=A;
    35 ans+=C;
    36 break;
    37 }
    38 case 'T':
    39 {
    40 ans+=A;
    41 ans+=C;
    42 ans+=G;
    43 break;
    44 }
    45 }
    46 }
    47 return ans;
    48 }
    49
    50 int cmp(const void* a,const void* b)
    51 {
    52 DNAStr* x=(DNAStr*)a;
    53 DNAStr* y=(DNAStr*)b;
    54 return (x->num)-(y->num);
    55 }
    56
    57 int main(void)
    58 {
    59 int n,m;
    60 while(cin>>n>>m)
    61 {
    62 DNAStr* DNA=new DNAStr[m];
    63 for(int i=0;i<m;i++)
    64 {
    65 cin>>DNA[i].sq;
    66 DNA[i].num = InversionNumber(DNA[i].sq,n);
    67 }
    68 qsort(DNA,m,sizeof(DNAStr),cmp);
    69 for(int j=0;j<m;j++)
    70 cout<<DNA[j].sq<<endl;
    71 }
    72 return 0;
    73 }

  • 相关阅读:
    state estimation for robotics-1
    Linux命令----用户目录、路径
    Linux命令----系统目录结构
    Linux命令----shell
    socket php
    深入浅出讲解:php的socket通信 转
    phpstorm配置sftp自动上传
    linux下xdebug的安装和配置方法
    xdebug安装
    swoole 客户端和服务端不断通信
  • 原文地址:https://www.cnblogs.com/lyy289065406/p/2122199.html
Copyright © 2011-2022 走看看