思路:
这个题就涉及到qsort的使用,主要是compare函数的设计。这里先引用一下一个帖子:qsort函数的使用
有空自己来写一写。记得加头文件
#include<cstdlib>
代码:
#include<iostream>
#include<cstdlib>
using namespace std;
struct Stu
{
int id;
int mo; //morality
int ca; //capability
int data;
}a1[100001], a2[100001], a3[100001], a4[100001];
int num[5] = { 0 };
int n, l, h;
int cmp(const void *a, const void *b)
{
int flag = -1;
struct Stu *aa = (Stu *)a;
struct Stu *bb = (Stu *)b;
if (aa->data < bb->data)
flag = 1;
if (aa->data == bb->data && aa->mo < bb->mo)
flag = 1;
if (aa->data == bb->data && aa->mo == bb->mo && aa->id > bb->id)
flag = 1;
return flag;
}
int main()
{
int i, j;
struct Stu s;
cin >> n >> l >> h;
for (i = 0; i < n; i++)
{
cin >> s.id >> s.mo >> s.ca;
if (s.mo < l || s.ca < l)
continue;
num[0]++;
s.data = s.mo + s.ca;
if (s.mo >= h && s.ca >= h)
{
num[1]++;
a1[num[1]] = s;
continue;
}
if (s.mo >= h)
{
num[2]++;
a2[num[2]] = s;
continue;
}
if (s.mo >= s.ca)
{
num[3]++;
a3[num[3]] = s;
continue;
}
num[4]++;
a4[num[4]] = s;
}
qsort(a1+1, num[1], sizeof(a1[0]), cmp);
qsort(a2+1, num[2], sizeof(a2[0]), cmp);
qsort(a3+1, num[3], sizeof(a3[0]), cmp);
qsort(a4+1, num[4], sizeof(a4[0]), cmp);
cout << num[0] << "\n";
for (i = 1; i <= num[1]; i++)
cout << a1[i].id << " " << a1[i].mo << " " << a1[i].ca << "\n";
for (i = 1; i <= num[2]; i++)
cout << a2[i].id << " " << a2[i].mo << " " << a2[i].ca << "\n";
for (i = 1; i <= num[3]; i++)
cout << a3[i].id << " " << a3[i].mo << " " << a3[i].ca << "\n";
for (i = 1; i <= num[4]; i++)
cout << a4[i].id << " " << a4[i].mo << " " << a4[i].ca << "\n";
//while (1)
//{
//}
return 0;
}