http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3501
#include < iostream >
#include < algorithm >
#include < string .h >
#include < cstdio >
using namespace std;
char a[][ 15 ] = { " 0 " , " I " , " II " , " III " , " IV " , " V " , " VI " , " VII " , " VIII " , " IX " };
char b[][ 15 ] = { " 0 " , " X " , " XX " , " XXX " , " XL " , " L " , " LX " , " LXX " , " LXXX " , " XC " };
char c[][ 15 ] = { " 0 " , " C " , " CC " , " CCC " , " CD " , " D " , " DC " , " DCC " , " DCCC " , " CM " };
char d[][ 15 ] = { " 0 " , " M " , " MM " , " MMM " };
struct node
{
char f[ 15 ];
char ch[ 15 ];
}s[ 10010 ];
int cmp( const void * x, const void * y)
{
return strcmp( ((node * )x) -> ch , ((node * )y) -> ch );
}
int main()
{
int t,i,j;
int n,m;
char ch1[ 10010 ];
scanf( " %d " , & t);
while (t -- )
{
scanf( " %d " , & n);
for (i = 0 ;i < n;i ++ )
{
scanf( " %s " ,ch1);
strcpy(s[i].f, ch1);
int L = strlen(ch1);
if (L == 4 )
{
strcpy(s[i].ch, d[ch1[ 0 ] - ' 0 ' ]);
if (ch1[ 1 ] != ' 0 ' ) strcat(s[i].ch, c[ch1[ 1 ] - ' 0 ' ]);
if (ch1[ 2 ] != ' 0 ' ) strcat(s[i].ch, b[ch1[ 2 ] - ' 0 ' ]);
if (ch1[ 3 ] != ' 0 ' ) strcat(s[i].ch, a[ch1[ 3 ] - ' 0 ' ]);
}
if (L == 3 )
{
strcpy(s[i].ch,c[ch1[ 0 ] - ' 0 ' ]);
if (ch1[ 1 ] != ' 0 ' ) strcat(s[i].ch, b[ch1[ 1 ] - ' 0 ' ]);
if (ch1[ 2 ] != ' 0 ' ) strcat(s[i].ch , a[ch1[ 2 ] - ' 0 ' ]);
}
if (L == 2 )
{
strcpy(s[i].ch , b[ch1[ 0 ] - ' 0 ' ]);
if (ch1[ 1 ] != ' 0 ' ) strcat(s[i].ch, a[ch1[ 1 ] - ' 0 ' ]);
}
if (L == 1 )
{
strcpy(s[i].ch,a[ch1[ 0 ] - ' 0 ' ]);
}
}
qsort(s,n, sizeof (s[ 0 ]), cmp);
for (i = 0 ;i < n;i ++ )
{
printf( " %s " ,s[i].f);
if (i != n - 1 ) printf( " " );
}
printf( " \n " );
}
return 0 ;
}