zoukankan      html  css  js  c++  java
  • 北大ACM 1007题—DNA Sorting

    DNA Sorting
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 73451   Accepted: 29334

    Description

    One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this measure is 5, since D is greater than four letters to its right and E is greater than one letter to its right. This measure is called the number of inversions in the sequence. The sequence ``AACEDGG'' has only one inversion (E and D)---it is nearly sorted---while the sequence ``ZWQM'' has 6 inversions (it is as unsorted as can be---exactly the reverse of sorted). 

    You are responsible for cataloguing a sequence of DNA strings (sequences containing only the four letters A, C, G, and T). However, you want to catalog them, not in alphabetical order, but rather in order of ``sortedness'', from ``most sorted'' to ``least sorted''. All the strings are of the same length. 

    Input

    The first line contains two integers: a positive integer n (0 < n <= 50) giving the length of the strings; and a positive integer m (0 < m <= 100) giving the number of strings. These are followed by m lines, each containing a string of length n.

    Output

    Output the list of input strings, arranged from ``most sorted'' to ``least sorted''. Since two strings can be equally sorted, then output them according to the orginal order.

    Sample Input

    10 6
    AACATGAAGG
    TTTTGGCCAA
    TTTGGCCAAA
    GATCAGATTT
    CCCGGGGGGA
    ATCGATGCAT

    Sample Output

    CCCGGGGGGA
    AACATGAAGG
    GATCAGATTT
    ATCGATGCAT
    TTTTGGCCAA
    TTTGGCCAAA

    Source

    #include<iostream>
    #include<string>
    #include <cstdlib> 
    using namespace std;
    
    class DNA{
    public:
    	string seqDNA;
    	int num;
    };
    
    int compare(const void *p1, const void *p2)
    {
    	return(((DNA*)p1)->num-((DNA*)p2)->num);
    }
    
    int main()
    {
    	DNA *dna;
    	int n,m,num,count(0);
    	string listDNA;
    	cin>>m>>n;
    	dna=new DNA[n];
    
    	while(count	<n)
    	{
    		cin>>listDNA;
    		num=0;
    		for(int i=0;i<m-1;++i)
    		{                
    			//寻找逆序数目
    			for(int j=i+1;j<m;++j)
    			{
    				if(listDNA.at(i)>listDNA.at(j))
    					++num;
    			}
    		}
    		dna[count].num=num;
    		dna[count++].seqDNA=listDNA;
    	}
    
    	//根据逆序数目进行快速排序
    	qsort(dna,n,sizeof(DNA),compare);         
    	for(int i=0;i<n;++i)
    		cout<<dna[i].seqDNA<<endl;
    
    	delete []dna;
    	return 0;
    }


  • 相关阅读:
    java面试的那些事
    java多线程实现复制大文件
    java心跳发送
    Java实现缓存(LRU,FIFO)
    java并发阻塞队列
    java之路
    Intellij IDEA中使用Protobuf的正确姿势
    Flink JobManager HA模式部署(基于Standalone)
    查看Flink的Job Graph时的问题
    Flink从Kafka 0.8中读取多个Topic时的问题
  • 原文地址:https://www.cnblogs.com/finlay/p/3234726.html
Copyright © 2011-2022 走看看