#include <stdio.h> #include <string.h> #include <algorithm>using namespace Std;int n,m;struct e{ Char a[200]; int id; int px;} S[200];int cmp (e s1,e s2) { if (s1.px==s2.px) return s1.id<s2.id; else return s1.px<s2.px;} int main () { while (scanf ("%d%d", &n,&m)!=eof) {for (int i=0;i<m;i++) { int sum=0; s[i].id=i; scanf ("%s", s[i].a); for (int j=0;j<n-1;j++) for (int k=j+1;k<n;k++) if (s[i].a[j]>s[i].a[k]) sum++; s[i].px=sum; } Sort (s,s+m,cmp); for (int i=0;i<m;i++) printf ("%s\n", S[I].A);}}
But this method of getting sum is not very efficient
#include <stdio.h> #include <string.h> #include <algorithm>using namespace Std;int n,m;struct e{char A [200]; int id; int px;} S[200];int CMP (e s1,e s2) {if (S1.PX==S2.PX) return s1.id<s2.id; else return s1.px<s2.px;} int get (char a[]) {int ans = 0; int A, C, G; A = C = G = 0; for (int i = n-1; I >= 0, i--) {switch (A[i]) {case ' a ': a++; Break Case ' C ': C + +; Ans + = A; Break Case ' G ': g++; Ans + = A; Ans + = C; Break Case ' T ': ans + = A; Ans + = C; Ans + = G; }} return ans; int main () {while (scanf ("%d%d", &n,&m)!=eof) {for (int i=0;i<m;i++) {int sum=0; S[i].id=i; scanf ("%s", s[i].a); S[i].px=get (S[I].A); } sort (s,s+m,cmp); for (int i=0;i<m;i++) printf ("%s\n", S[I].A);}}
Lower complexity of time
Poj1007--dna sorting