http://poj.org/problem?id=1007
160K 0MS
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
struct DNAsort{
char str[60];
int num;
}dna[105];
int n,m;
int cmp(struct DNAsort &dna1,struct DNAsort &dna2){
return dna1.num<dna2.num;
}
int main(){
int i,j;
int A,C,G;
scanf("%d%d",&n,&m);
for(i=0;i<m;i++){
scanf("%s",dna[i].str);
dna[i].num=0;
A=C=G=0;
for(j=n-1;j>=0;j--){
switch(dna[i].str[j]){
case 'A': A++;break;
case 'C':{
C++;
dna[i].num+=A;
break;
}
case 'G':{
G++;
dna[i].num+=(C+A);
break;
}
case 'T':{
dna[i].num+=(G+C+A);
break;
}
}
}
}
sort(dna,dna+m,cmp);
for(i=0;i<m;i++){
printf("%s\n",dna[i].str,dna[i].num);
}
return 0;
}