录取四种学生:才德全尽,德胜才,才德兼亡但德胜才,过线的
开了四个容器分别将符合条件的学生压入相应的容器,再sort一下即可
注意id是升序
c++用endl换行会超时
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
struct student{
int id,de,cai,sum;
}s;
vector<student>a,b,c,d;
int n,l,h;
bool cmp(student x,student y)
{
if(x.sum!=y.sum) return x.sum>y.sum;
else
{
if(x.de!=y.de)
{
return x.de>y.de;
}
else return x.id<y.id;
}
}
int main()
{
cin>>n>>l>>h;
int m=0;
for(int i=0;i<n;i++)
{
cin>>s.id>>s.de>>s.cai;
s.sum=s.de+s.cai;
if(s.de>=l&&s.cai>=l)
{
m++;
if(s.de>=h&&s.cai>=h)
{
a.push_back(s);
}
else if(s.de>=h&&s.cai<h)
{
b.push_back(s);
}
else if(s.de<h&&s.cai<h&&s.de>=s.cai)
{
c.push_back(s);
}
else d.push_back(s);
}
}
//for(int i=0;i<n;i++) cout<<s.de<<s.cai<<endl;
cout<<m<<'\n';
sort(a.begin(),a.end(),cmp);
sort(b.begin(),b.end(),cmp);
sort(c.begin(),c.end(),cmp);
sort(d.begin(),d.end(),cmp);
for(int i=0;i<a.size();i++) cout<<a[i].id<<' '<<a[i].de<<' '<<a[i].cai<<'\n';
for(int i=0;i<b.size();i++) cout<<b[i].id<<' '<<b[i].de<<' '<<b[i].cai<<'\n';
for(int i=0;i<c.size();i++) cout<<c[i].id<<' '<<c[i].de<<' '<<c[i].cai<<'\n';
for(int i=0;i<d.size();i++) cout<<d[i].id<<' '<<d[i].de<<' '<<d[i].cai<<'\n';
return 0;
}