这题挺简单的,qsort要会用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char id[100];
int de;
int cai;
int sum;
int rank;
}Stu;
Stu stu[100000];//必须全局变量且数组开的足够大否则段错误
int N, L, H, M = 0;
int cmp(const void *a, const void *b)
{
const Stu *A = (Stu *) a;
const Stu *B = (Stu *) b;
if(A->rank == B->rank)
{
if(A->sum == B->sum)
{
if(A->de == B->de)
return strcmp(A->id, B->id);
return B->de - A->de;
}
return B->sum - A->sum;
}
return A->rank - B->rank;
}
int main()
{
scanf("%d %d %d", &N, &L, &H);
for(int i = 0; i < N; i++)
{
scanf("%s %d %d", stu[i].id, &stu[i].de, &stu[i].cai);
stu[i].sum = stu[i].de + stu[i].cai;
}
for(int i = 0; i < N; i++)
{
if(stu[i].de >= L && stu[i].cai >= L)
{
M++;
if(stu[i].de >= H && stu[i].cai >= H)
stu[i].rank = 1;
else if(stu[i].de >= H && stu[i].cai < H)
stu[i].rank = 2;
else if(stu[i].de < H && stu[i].cai < H && stu[i].de >= stu[i].cai)
stu[i].rank = 3;
else
stu[i].rank = 4;
}
else
stu[i].rank = 5;
}
qsort(stu, N, sizeof(Stu), cmp);
printf("%d\n", M);
for(int i = 0; i < M; i++)
printf("%s %d %d%c", stu[i].id, stu[i].de, stu[i].cai, i - 1 == N ? ' ' : '\n');
return 0;
}