摘要:
水,不過看了discuss後知道求逆序對數是可以o(n)內做到的。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef struct Node{
int value;
string sequence;
}Node;
const int size = 100;
Node input[size];
int calculateValue(string sequence)
{
int value = 0;
int length = sequence.length();
int c[4] = {0};
for(int i=length-1; i>=0; i--){
switch(sequence[i]){
case 'A':
c[1]++;
c[2]++;
c[3]++;
break;
case 'C':
c[2]++;
c[3]++;
value += c[1];
break;
case 'G':
c[3]++;
value += c[2];
break;
case 'T':
value += c[3];
break;
}
}
return value;
}
bool compare(Node one, Node two)
{
return one.value < two.value;
}
int main()
{
int n, m;
cin >> n >> m;
string s;
for(int i=0; i<m; i++){
cin >> s;
int value = calculateValue(s);
input[i].sequence = s;
input[i].value = value;
}
stable_sort(input, input+m, compare);
for(int i=0; i<m; i++){
cout << input[i].sequence << endl;
}
return 0;
}