下了一个样例,本地正确
#include<iostream>
using namespace std;
int n,q[21];
struct Node{
int a[11]={0},s;
bool operator<(const Node&A)const{
for(int i=1;i<=min(q[s],q[A.s]);i++)if(a[i]!=A.a[i])return a[i]<A.a[i];
if(q[s]!=q[A.s]){
for(int i=min(q[s],q[A.s])+1;i<=max(q[s],q[A.s]);i++){
if(a[1]==max(a[i],A.a[i]))continue;
return (q[s]<q[A.s]&&a[1]<A.a[i])||(q[s]>q[A.s]&&a[1]>a[i]);
}
}
return false;
}
}a[21];
void quicksort(int l,int r){
if(l>=r)return;
Node x=a[l];int i=l,j=r;
while(i<j){
while(i<j&&x<a[j])j--;
if(i<j)a[i++]=a[j];
while(i<j&&a[i]<x)i++;
if(i<j)a[j--]=a[i];
}
a[i]=x;
quicksort(l,i-1);quicksort(i+1,r);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
a[i].s=i;
int l=0;
char c=getchar();
if(c>'9'||c<'0')c=getchar();
while(c>='0'&&c<='9'){
a[i].a[++l]=c-'0';
c=getchar();
}
q[i]=l;
}
quicksort(1,n);
for(int i=n;i;--i)
for(int j=1;j<=q[a[i].s];++j)cout<<a[i].a[j];
cout<<endl;
return 0;
}