#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<map> #include<vector> #include<queue> using namespace std; //评分,第四类放最后,排序,记得保存及格人数方便打印 struct Student{ char id[10]; //准考证号 int de,cai,sum; //德分,才分,总分 int flag; //考生类别:第1类~第5类 }stu[100010]; bool cmp(Student a,Student b){ if(a.flag != b.flag) return a.flag<b.flag; else if(a.sum != b.sum) return a.sum>b.sum; else if(a.de != b.de) return a.de>b.de; else return strcmp(a.id,b.id) <0; //德分相同则准考证小的在前面 } int main(){ int n,L,H; scanf("%d%d%d",&n,&L,&H); int m=n; //m为几个人数,方便后面统计及格人数 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; //计算总分 if(stu[i].de < L || stu[i].cai <L ){ stu[i].flag=5; m--; //及格人数减1 } else if(stu[i].de >= H && stu[i].cai>=H) stu[i].flag=1; else if(stu[i].de >= H && stu[i].cai<H) stu[i].flag=2; else if(stu[i].de >= stu[i].cai) stu[i].flag=3; else stu[i].flag=4; //第四类情况最多,因此放在最后 } sort(stu, stu+n,cmp); printf("%d\n",m); for(int i=0;i<m;i++){ printf("%s %d %d\n",stu[i].id,stu[i].de,stu[i].cai); } system("pause"); return 0; }