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.
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
解题思路:这题主要要看懂题意就KO了,知道了就很简单了,刚开始一直不知道是 什么回事的,一直不知怎么出那个结果的,最后Google一下就完全明白了,只是暴力求 出逆序和,然后排序,没 什么可以说的,也没什么复杂的算法,只是简单的一些操作,就随便在网上copy了 一个代码解决问题了,但还是要学会 结构体排序等等。 代码如下:
- #include<iostream>
- #include<algorithm>
- #include<string>
- usingnamespacestd;
- structdna
- {
- intpos;
- intkey;
- stringstr;
- };
- /*sort比较函数*/
- boolcmp(constdna&a,constdna&b)
- {
- if(a.key!=b.key)
- {
- returna.key<b.key;
- }
- else
- {
- returna.pos<b.pos;
- }
- }
- intmain()
- {
- intn,m,count;
- dnainv[110];
- stringstr;
- cin>>n>>m;
- /*求逆序数对的个数*/
- for(inti=0;i<m;i++)
- {
- cin>>str;
- count=0;
- for(intj=0;j<n-1;j++)
- {
- for(intk=j+1;k<n;k++)
- {
- if(str[j]>str[k])count++;
- }
- }
- /*保存信息*/
- inv[i].key=count;
- inv[i].pos=i;
- inv[i].str=str;
- }
- /*按逆序数对大小/序号排序*/
- sort(inv,inv+m,cmp);
- /*输出结果*/
- for(inti=0;i<m;i++)
- {
- cout<<inv[i].str<<endl;
- }
- //system("pause");
- return0;
- }