题目链接:http://poj.org/problem?id=1007
思路:先对每一个DNA序列求逆序数,然后根据逆序数排序输出,水题
///2014.7.24
///poj1007
//Accepted 708K 47MS G++ 835B 2014-07-25 10:29:02
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m;
struct DNA{
int num;
char str[110];
};
bool cmp(DNA a,DNA b){
return a.num < b.num;
}
DNA dna[110];
int order[26];
int Inver(DNA &a){
a.num = 0;
for(int i=0 ; i<n-1 ; i++){
for(int j=i+1 ; j<n ; j++){
if( order[ a.str[j]-'A' ] < order[ a.str[i]-'A' ] )
a.num++;
}
}
return a.num;
}
int main(){
order['A'-'A'] = 0;
order['C'-'A'] = 1;
order['G'-'A'] = 2;
order['T'-'A'] = 3;
cin>>n>>m;
for(int i=0 ; i<m ; i++){
cin>>dna[i].str;
Inver(dna[i]);
}
sort(dna,dna+m,cmp);
for(int i=0 ; i<m ; i++){
cout<<dna[i].str<<endl;
}
return 0;
}