题意
除去均小于l的人外,对下列人进行排序
圣人 天赋>=h && 道德>=h
君子 道德>=h && 天赋<h
愚人 道德<h && 天赋<h && 道德>=天赋
小人 其余条件
源码
#include<algorithm>
using namespace std;
struct Node{
string id;
int vir,tal;
int tag;
int num;
};
bool cmp(const Node& x,const Node& y){
if(x.tag==y.tag){
if(x.tal+x.vir==y.tal+y.vir)
if(x.vir==y.vir)
return x.id<y.id;
else
return x.vir>y.vir;
else
return x.tal+x.vir>y.tal+y.vir;
}
return x.tag>y.tag;
}
Node node[100005];
int main(){
int n,l,h;
cin>>n>>l>>h;
int counter=n;
for(int i=0;i<n;i++){
cin>>node[i].id>>node[i].vir>>node[i].tal;
node[i].num=i;
if(node[i].vir<l || node[i].tal<l){
node[i].tag=-1;
counter--;
}else if(node[i].vir>=h &&node[i].tal>=h){
node[i].tag=4;
}else if(node[i].vir>=h && node[i].tal<h){
node[i].tag=3;
}else if(node[i].vir<h && node[i].tal<h &&node[i].vir>=node[i].tal){
node[i].tag=2;
}else{
node[i].tag=1;
}
}
sort(node,node+n,cmp);
cout<<counter<<endl;
for(int i=0;i<n;i++){
if(node[i].tag==-1) break;
cout<<node[i].id<<" "<<node[i].vir<<" "<<node[i].tal<<endl;
}
return 0;
}