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>
- using namespace std;
- struct dna
- {
- int pos;
- int key;
- string str;
- };
- /* sort比较函数 */
- bool cmp(const dna &a, const dna &b)
- {
- if (a.key != b.key)
- {
- return a.key < b.key;
- }
- else
- {
- return a.pos < b.pos;
- }
- }
- int main()
- {
- int n, m, count;
- dna inv[110];
- string str;
- cin >> n >> m;
- /* 求逆序数对的个数 */
- for (int i = 0; i < m; i++)
- {
- cin >> str;
- count = 0;
- for (int j = 0; j < n - 1; j++)
- {
- for (int k = 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 (int i = 0; i < m; i++)
- {
- cout << inv[i].str << endl;
- }
- //system("pause");
- return 0;
- }