代码实现:
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int num, de, cai, sum;
}struction;
int cmp_sum(const void *a, const void *b)
{
struction *aa = (struction*)a, *bb = (struction*)b;
return (((aa->sum) > (bb->sum)) ? -1 : 1);
}
int cmp_de(const void *a, const void *b)
{
struction *aa = (struction*)a, *bb = (struction*)b;
return (((aa->de) > (bb->de)) ? -1 : 1);
}
int cmp_num(const void *a, const void *b)
{
struction *aa = (struction*)a, *bb = (struction*)b;
return (((aa->num) > (bb->num)) ? 1 : -1);
}
void Sort(struction *a, int N)
{
for (int i = 0; i < N; i++)a[i].sum = a[i].de + a[i].cai;
qsort(a, N, sizeof(struction), cmp_sum);
for (int i = 0; i < N - 1; i++)
{
if (a[i].sum == a[i + 1].sum)
{
int cnt = 0, j;
for (j = i; a[j].sum == a[i].sum; j++)cnt++;
qsort(a + i, cnt, sizeof(struction), cmp_de);
i = j - 1;
}
}
for (int i = 0; i < N - 1; i++)
{
if (a[i].sum == a[i + 1].sum&&a[i].de == a[i + 1].de)
{
int cnt = 0, j;
for (j = i; a[j].sum == a[i].sum&&a[j].de == a[i].de; j++)cnt++;
qsort(a + i, cnt, sizeof(struction), cmp_num);
i = j - 1;
}
}
}
void Print(struction *a, int N)
{
for (int i = 0; i < N; i++)
printf("%d %d %d\n", a[i].num, a[i].de, a[i].cai);
}
int main()
{
struction *a, *a1, *a2, *a3, *a4;
int N, L, H, cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
scanf("%d %d %d", &N, &L, &H);
a = (struction*)malloc(sizeof(struction)*N);
for (int i = 0; i < N; i++)
{
scanf("%d %d %d", &a[i].num, &a[i].de, &a[i].cai);
if (a[i].de >= H && a[i].cai >= H)cnt1++;
else if (a[i].de >= H && a[i].cai >= L)cnt2++;
else if (a[i].de >= a[i].cai&&a[i].cai >= L)cnt3++;
else if (a[i].de >= L && a[i].cai >= L)cnt4++;
}
a1 = (struction*)malloc(sizeof(struction)*cnt1);
a2 = (struction*)malloc(sizeof(struction)*cnt2);
a3 = (struction*)malloc(sizeof(struction)*cnt3);
a4 = (struction*)malloc(sizeof(struction)*cnt4);
int cnt11 = cnt1, cnt22 = cnt2, cnt33 = cnt3, cnt44 = cnt4;
for (int i = 0; i < N; i++)
if (a[i].de >= H && a[i].cai >= H)a1[--cnt1] = a[i];
else if (a[i].de >= H && a[i].cai >= L)a2[--cnt2] = a[i];
else if (a[i].de >= a[i].cai&&a[i].cai >= L)a3[--cnt3] = a[i];
else if (a[i].de >= L && a[i].cai >= L)a4[--cnt4] = a[i];
printf("%d\n", cnt11 + cnt22 + cnt33 + cnt44);
Sort(a1, cnt11), Sort(a2, cnt22), Sort(a3, cnt33), Sort(a4, cnt44);
Print(a1, cnt11), Print(a2, cnt22), Print(a3, cnt33), Print(a4, cnt44);
return 0;
}