poj1007DNA Sorting(排序水)

DNA Sorting
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 102983   Accepted: 41251

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<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
    char a[110][55];
    int i, j, k;
    int dic[110], dic1[110];
    int m, n;
    scanf("%d%d",&n,&m);
    
        memset(dic,0,sizeof(dic));
        memset(dic1,0,sizeof(dic1));
        for (i = 0; i < m; i++)
            scanf("%s",a[i]);
        for (i = 0; i < m; i++)
            for (j = 0; j < n - 1; j++)
                for (k = j + 1; k < n; k++)
                    if (a[i][k] < a[i][j]) dic[i]++,dic1[i]++;
        sort(dic, dic + m);
        for (i = 0; i < m; i++)
            for (j = 0; j < m; j++)
                if (dic[i] == dic1[j])
                {
                    printf("%s\n", a[j]);
                    dic1[j] = -1;
                    break;
                }
    
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_32792879/article/details/77504597