巧记排序函数:标准库的sort()函数,保证排序后,数据的顺序与排序函数中的不等关系一致(好像也不巧)
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct
{
long int ID_Number;
int Virtue_Grade, Talent_Grade, Total_Grade, type;
} Man;
bool cmp(Man m1,Man m2)
{
//比较函数的规则记忆:排序后的结果与函数中的不等号一致
if(m1.type!=m2.type)
return m1.type < m2.type;
else if(m1.Total_Grade!=m2.Total_Grade)
return m1.Total_Grade > m2.Total_Grade;
else if(m1.Virtue_Grade!=m2.Virtue_Grade)
return m1.Virtue_Grade > m2.Virtue_Grade;
else if(m1.ID_Number!=m2.ID_Number)
return m1.ID_Number < m2.ID_Number;
}
int main()
{
int n, low, high, i, virtue, talent, k = 0;
long int id;
Man man[100100];
scanf("%d %d %d", &n, &low, &high);
for (i = 0; i < n;i++)
{
scanf("%ld %d %d", &id, &virtue, &talent);
if(virtue>=low&&talent>=low)
{
man[k].ID_Number = id;
man[k].Talent_Grade = talent;
man[k].Virtue_Grade = virtue;
man[k].Total_Grade = talent + virtue;
if(virtue>=high&&talent>=high)
man[k].type = 1;
else if(virtue>=high&&talent<high)
man[k].type = 2;
else if(virtue>=talent)
man[k].type = 3;
else
man[k].type = 4;
k++;
}
}
sort(man, man + k, cmp);
printf("%d\n", k);
for (i = 0; i < k;i++)
printf("%ld %d %d\n", man[i].ID_Number, man[i].Virtue_Grade, man[i].Talent_Grade);
getchar();
}