poj 1007 DNA Sorting

DNA Sorting
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 76039   Accepted: 30490

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

 
题意:
      給m串长n的字符串,其价值为每字符比后面字符大的个数的和,按价值从小到大排序m串字符并输出
      我是直接用容器暴力的,也可以用其他排序
 
 1 //Accepted    228K    32MS    C++    809B    2013-10-13 17:18:38
 2 //简单的容器练习题.. 
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<string>
 6 #include<map>
 7 using namespace std;
 8 map<string,int>M;
 9 int n,m,a[105];
10 int get(string s) //得到价值
11 {
12     int len=s.length();
13     int sum=0;
14     for(int i=0;i<len;i++)
15         for(int j=i+1;j<len;j++)
16             if(s[i]>s[j]) sum++;
17     return sum;
18 }
19 int main(void)
20 {
21     string s;
22     while(cin>>m>>n)
23     {
24         for(int i=0;i<n;i++){
25             cin>>s;
26             M[s]=get(s);
27             a[i]=M[s];
28         }
29         sort(a,a+n);
30         for(int i=0;i<n;i++){
31             //cout<<a[i]<<endl;
32             for(map<string,int>::iterator it=M.begin();it!=M.end();it++){ //遍历n串
33                 if((it->second)==a[i])
34                     cout<<it->first<<endl;
35                 //break;
36             }
37         }
38     }
39     return 0;
40 }

 

posted @ 2013-10-13 17:22  heaventouch  阅读(108)  评论(0编辑  收藏  举报