这道题走了弯路.
#include<bits/stdc++.h>
using namespace std;
typedef struct{
int num;
int De;
int Cai;
int sum;
}student;
bool cmp(student a,student b){
if(a.sum!=b.sum) return a.sum>b.sum;
else if (a.sum==b.sum&&a.De!=b.De) return a.De>b.De;
else if (a.sum==b.sum&&a.De==b.De) return a.num<b.num;
else return 0;
}
int main(void){
std::ios::sync_with_stdio(false);
int N,L,H;
int count=0;
cin>>N>>L>>H;
vector<student> stu(N);
for(int i=0;i<N;i++){
cin>>stu[i].num>>stu[i].De>>stu[i].Cai;
stu[i].sum = stu[i].De+stu[i].Cai;
}//输入
sort(stu.begin(),stu.end(),cmp);//按cmp里面写的规则排序
//我们已经得到正确的序列了,下面来求需要输出几个人,这里我们从后往前
for(int i =N-1;i>=0;i--){
if(stu[i].De<L||stu[i].Cai<L) {
stu[i].sum = 0;
}
}
for(int i=0;i<N;i++){
if(stu[i].sum!=0) count++;
}
//此时count里面保存了需要输出的人的个数;
cout<<count<<"\n";
for(int i=0;i<N;i++)
if(stu[i].De>=H && stu[i].Cai>=H && stu[i].De>=L && stu[i].Cai>=L&& stu[i].sum!=0)
cout<<stu[i].num<<" "<<stu[i].De<<" "<<stu[i].Cai<<"\n";
//以上是第一类
for(int i=0;i<N;i++)
if(stu[i].De>=H && stu[i].Cai<H && stu[i].De>=L && stu[i].Cai>=L && stu[i].sum!=0)
cout<<stu[i].num<<" "<<stu[i].De<<" "<<stu[i].Cai<<"\n";
//以上是第二类
for(int i=0;i<N;i++)
if(stu[i].De<H && stu[i].Cai<H && stu[i].De>=stu[i].Cai && stu[i].De>=L && stu[i].Cai>=L && stu[i].sum!=0)
cout<<stu[i].num<<" "<<stu[i].De<<" "<<stu[i].Cai<<"\n";
//以上第三类
for(int i=0;i<N;i++)
if(stu[i].De<H && stu[i].De<stu[i].Cai && stu[i].De>=L && stu[i].Cai>=L && stu[i].sum!=0)
cout<<stu[i].num<<" "<<stu[i].De<<" "<<stu[i].Cai<<"\n";
//以上第四类
}