一、题目
二、源代码
#include< stdio. h>
struct Student
{
long int no;
int de, cai, f;
} ;
int cmp ( struct Student a, struct Student b) {
if ( a. f!= b. f)
return a. f< b. f;
else if ( ( a. de + a. cai) != ( b. de + b. cai) )
return ( a. de + a. cai) > ( b. de + b. cai) ;
else if ( a. de != b. de)
return a. de > b. de;
else
return a. no < b. no;
}
void qusort ( struct Student s[ ] , int start, int end)
{
int i= start, j= end;
struct Student temp= s[ start] ;
while ( i< j)
{
while ( i< j && cmp ( temp, s[ j] ) ) j-- ;
if ( i< j) s[ i++ ] = s[ j] ;
while ( i< j && cmp ( s[ i] , temp) ) i++ ;
if ( i< j) s[ j-- ] = s[ i] ;
}
s[ i] = temp;
if ( start< i) qusort ( s, start, j- 1 ) ;
if ( i< end) qusort ( s, j+ 1 , end) ;
}
int main ( )
{
int n, l, h, i= 0 , b5= 0 , j;
struct Student stu[ 100001 ] ;
scanf ( "%d %d %d" , & n, & l, & h) ;
while ( n-- )
{
scanf ( "%ld %d %d" , & stu[ i] . no, & stu[ i] . de, & stu[ i] . cai) ;
if ( stu[ i] . de< l || stu[ i] . cai< l)
{
b5++ ;
stu[ i] . f= 5 ;
}
else if ( stu[ i] . de>= h && stu[ i] . cai>= h) stu[ i] . f= 1 ;
else if ( stu[ i] . de>= h && stu[ i] . cai>= l && stu[ i] . cai< h) stu[ i] . f= 2 ;
else if ( stu[ i] . cai>= l && stu[ i] . cai< h && stu[ i] . de>= l && stu[ i] . de< h && stu[ i] . de >= stu[ i] . cai) stu[ i] . f= 3 ;
else stu[ i] . f= 4 ;
i++ ;
}
printf ( "%d\n" , i- b5) ;
qusort ( stu, 0 , i- 1 ) ;
for ( j= 0 ; j< i- b5; j++ ) printf ( "%ld %d %d\n" , stu[ j] . no, stu[ j] . de, stu[ j] . cai) ;
return 0 ;
}
三、运行结果