归并排序。。。。
AC代码:
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#define N 60
using namespace std;
char a[101][N],b[N];
struct str{ int value;
int id;
}c[101];
bool cmp(str x,str y)
{return x.value<y.value;}
long num;
void merge(char a[],int p,int q,int r,int s)
{ int a1=p,k=p,c=r;
while(a1<=q&&c<=s)
{ if(a[a1]<=a[c]) b[k++]=a[a1++];
else{b[k++]=a[c++];num+=q-a1+1;}
}
if(a1>q)
for(;c<=s;++c)
b[k++]=a[c];
if(c>s)
for(;a1<=q;++a1)
b[k++]=a[a1];
for(;p<k;++p)
a[p]=b[p];
}
void merge_sort(char a[],int p,int r)
{ if(p<r)
{ int q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
merge(a,p,q,q+1,r);
}
}
int main()
{ int n,m;
cin>>n>>m;
for(int i=0;i<m;++i)
{ num=0;
for(int j=0;j<n;++j)
cin>>a[i][j];
char aa[50];
strcpy(aa,a[i]);
merge_sort(aa,0,n-1);
c[i].value=num;
c[i].id=i;
}
sort(c,c+m,cmp);
for(int i=0;i<m;++i)
cout<<a[c[i].id]<<endl;
return 0;
}