Written by
daweibayu
on
on
Poj 1007
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct DNAChain
{
string chain;
int measure;
};
int compare(const DNAChain& chain1, const DNAChain& chain2)
{
return chain1.measure < chain2.measure;
}
int calculateMeasure(const string& chain)
{
int numA = 0, numC = 0, numG = 0, numT = 0;
int numTotal = 0;
for(int i = chain.size() - 1; i >= 0; i--)
{
switch(chain[i])
{
case 'A':
{
numA++;
break;
}
case 'C':
{
numC++;
numTotal += numA;
break;
}
case 'G':
{
numG++;
numTotal += (numA + numC);
break;
}
case 'T':
{
numT++;
numTotal += (numA + numC + numG);
break;
}
}
}
return numTotal;
}
int main()
{
vector<DNAChain> m_dnaSort;
int n,m;
cin >> n >> m;
while((--m) >= 0)
{
DNAChain dnaNode;
string dnaString;
cin >> dnaString;
dnaNode.measure = calculateMeasure(dnaString);
dnaNode.chain = dnaString;
m_dnaSort.push_back(dnaNode);
}
sort(m_dnaSort.begin(), m_dnaSort.end(), compare);
for(int i = 0; i < m_dnaSort.size(); i++)
{
cout << m_dnaSort[i].chain << endl;
}
}