LeeBlog

导航

HDU 1862 EXCEL排序

这个很水用个结构体,不过排序要用快排,别用冒泡,否则超时.TLE  我就悲剧了一次

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct e
{
       char t[20],name[20];
       int s;
}p[100005];
int n,c;
int cmp1( const void *a,const void *b )
{
    struct e f1 = *( (e *)a ),f2 = *( ( e * )b );
    return strcmp( f1.t,f2.t );
}
int cmp2( const void *a,const void *b )
{
    struct e f1 = *( (e *)a ),f2 = *( ( e * )b );
    int t = strcmp( f1.name,f2.name );
    if( t )
        return t;
    else
        return strcmp( f1.t,f2.t );
}
int cmp3( const void *a,const void *b )
{
    struct e f1 = *( (e *)a ),f2 = *( ( e * )b );
    int t = f1.s - f2.s;
    if( t )
        return t;
    else
        return strcmp( f1.t,f2.t );
}
int main( )
{
    int t = 0;
    while( scanf( "%d%d",&n,&c ) ,n|c )
    {
           ++t;
           for( int i = 0; i < n; ++i )
                scanf( "%s%s%d",p[i].t,p[i].name,&p[i].s );
           if( c == 1 )
               qsort( p,n,sizeof( p[0] ),cmp1 );
           if( c == 2 )
               qsort( p,n,sizeof( p[0] ),cmp2 );
           if( c == 3 )
               qsort( p,n,sizeof( p[0] ),cmp3 );
           printf( "Case %d:\n",t );
           for( int i = 0; i < n; ++i )
                printf( "%s %s %d\n",p[i].t,p[i].name,p[i].s );
           }
    return 0;
}

posted on 2011-05-03 20:24  LeeBlog  阅读(280)  评论(0编辑  收藏  举报