zoukankan      html  css  js  c++  java
  • POJ1007(DNA Sorting)

    题目链接

    求逆序数的题。因为只有4种元素,所以可以直接统计排在某个元素前面且比它小的元素个数(用4个变量记录已出现的A,C,G,T的个数),复杂度为O(N)。若元素种类很多,可以使用树状数组进行类似基数排序的统计。

    View Code
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define N 55
     4 #define M 105
     5 struct node
     6 {
     7     char s[N];
     8     int d;
     9 }node[M];
    10 int a,c,g,t,len;
    11 int cal(char s[])
    12 {
    13     int i,sum;
    14     a=c=g=t=0;
    15     sum=0;
    16     for(i=0;i<len;i++)
    17     {
    18         switch(s[i])
    19         {
    20             case 'A':   a++,sum+=c+g+t; break;
    21             case 'C':   c++,sum+=g+t;   break;
    22             case 'G':   g++,sum+=t; break;
    23             case 'T':   t++;    break;
    24         }
    25     }
    26     return sum;
    27 }
    28 int cmp(const void*a,const void*b)
    29 {
    30     int x,y;
    31     x=((struct node*)a)->d;
    32     y=((struct node*)b)->d;
    33     if(x!=y)    return x>y?1:-1;
    34     else    return (struct node*)a-(struct node*)b;
    35 }
    36 int main()
    37 {
    38     int i,m;
    39     while(~scanf("%d%d",&len,&m))
    40     {
    41         getchar();
    42         for(i=0;i<m;i++)
    43         {
    44             gets(node[i].s);
    45             node[i].d=cal(node[i].s);
    46         }
    47         qsort(node,m,sizeof(node[0]),cmp);
    48         for(i=0;i<m;i++)    puts(node[i].s);
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    vi常用操作
    Python练习题
    Jmeter也能IP欺骗!
    mysql主从配置
    性能测试之mysql监控、优化
    Git 命令
    Chrome——F12 谷歌开发者工具详解
    Appscan
    微信群发红包抢红包设计测试用例
    MySQL基础篇(1)SQL基础
  • 原文地址:https://www.cnblogs.com/algorithms/p/2454748.html
Copyright © 2011-2022 走看看