本題先求各個DNA序列的逆序數,再排序,這裏是穩定排序(題目中說明了如果二者逆序數相同不改變相對位置)。So,這裏用stable_sort(),not sort()。 之前一直wa,把輸入方式getline(cin,string **)改爲cin>>..結果AC了,that's strange !
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
struct DNA{ //save the DNA sequences
char str[55];
int num;
} dna[105];
int unsortedness(char *p){ //count the unsortedness measures
int unsortNum = 0;
for (int j = 1; j < strlen(p); j++){
for (int k = 0; k < j; k++){
if (p[k]>p[j])
unsortNum++;
}
}
return unsortNum;
}
bool cmp(DNA p1, DNA p2){ // a parameter of stable_sort
return p1.num < p2.num;
}
int main()
{
int i;
int n, m; // n length of a string ,m lines
cin >> n >> m;
for (i = 0; i < m; i++){ //input test case
cin >> dna[i].str;
dna[i].num = unsortedness(dna[i].str);
}
stable_sort(dna, dna + m, cmp); // not sort()
for (i = 0; i < m;i++){ //display the sorted sequences
cout << dna[i].str << endl;
}
return 0;
}