分组排序:
vg,tg >= L 的才进入排序
vg.tg >= H的圣人
tg<H vg>=H的君子
tg<H,vg<H,vg>=vt的小人
剩下的君子。
然后再内部排序按总成绩,vg,id的顺序进行排序。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <map>
#include <stack>
#include <queue>
#include <set>
using namespace std;
int n,l,h;
struct node{
int id;
int vg;
int tg;
int total;
int r;
};
vector <node> ans;
bool cmp(node n1,node n2){
if(n1.r != n2.r)
return n1.r < n2.r;
else if(n1.total != n2.total)
return n1.total > n2.total;
else if(n1.vg != n2.vg)
return n1.vg > n2.vg;
else
return n1.id < n2.id;
}
int main(){
scanf("%d%d%d",&n,&l,&h);
node t;
for(int i =0 ;i < n ;i++){
scanf("%d%d%d",&t.id,&t.vg,&t.tg);
if(t.tg >= l && t.vg >= l){
t.total = t.tg + t.vg;
//判定开始
if(t.tg >= h && t.vg >= h)
t.r = 1;
else if(t.tg <h && t.vg >= h)
t.r = 2;
else if(t.tg < h && t.vg < h && t.vg >= t.tg)\
t.r = 3;
else
t.r = 4;
ans.push_back(t);
}
}
sort(ans.begin(),ans.end(),cmp);
printf("%d\n",ans.size());
for(int i = 0 ;i < ans.size();i++)
printf("%d %d %d\n",ans[i].id,ans[i].vg,ans[i].tg);
return 0;
}