字母序列的逆序数:对序列里的每一个字符,按照字典序的顺序,当前字母后面比它小的字母个数为该字母的逆序数,所有字母的逆序只和为字母序列的逆序数。
给出若干段等长的DNA序列,把给出的DNA序列按照逆序数由小到大的顺序排列输出,如果两段序列的逆序数相同则按输入时的顺序输出。
Code:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100 + 10;
const int maxstr = 50 + 5;
struct dnastr
{
char str[maxstr];
int deg;
};
dnastr st[maxn];
int cmp( dnastr a, dnastr b )
{
return a.deg < b.deg;
}
int main()
{
int len, n;
scanf( "%d%d", &len, &n );
for( int i = 0; i < n; i++ )
{
int degtmp = 0;
scanf( "%s", st[i].str );
for( int j = 0; j < len; j++ )
{
for( int k = j + 1; k < len; k++ )
{
if( st[i].str[k] < st[i].str[j] )
degtmp++;
}
}
st[i].deg = degtmp;
}
sort( st, st + n, cmp );
for( int i = 0; i < n; i++ )
printf( "%s\n", st[i].str );
return 0;
}