水题. 早上上机实验的时候无聊看的, 不写完不舒服斯基.
其中统计逆序数的方法可以用一个双重for循环, 但是这样效率不高.
#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
int main()
{
//freopen("input.txt", "r", stdin);
multimap<int, char *> str;
char in[110][60];
int n, len, i, j;
scanf("%d%d%*c", &len, &n);
for (i = 0; i < n; i++)
{
int counta = 0, countc = 0, countg = 0, countt = 0;
int sum = 0;
gets(in[i]);
for (j = len - 1; j >= 0; j--)
{
switch (in[i][j])
{
case 'A':
counta++;
break;
case 'C':
countc++;
sum += counta;
break;
case 'G':
countg++;
sum += counta + countc;
break;
case 'T':
countt++;
sum += counta + countc + countg;
break;
}
}
str.insert(make_pair(sum, in[i]));
}
for (multimap<int, char *>::iterator it = str.begin(); it != str.end(); it++)
printf("%s\n", it->second);
return 0;
}