C++ 代码
//按照美德排相同,再按ID,排相同
//分4类
//补充:字符串有两种比较方式,一种是< ,> :逐个比较单词的ASC码
// 另一种是 strcmp(int [],int []): 比较字符串长度
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct W{
string a;
int t;
int v;
int all;
bool operator<(const W&w){
if(w.all!=all) return w.all<all;
else {
if(w.v==v) return w.a>=a;
else return w.v<v;
}
}
}sage[N];
struct LOWER{
string a;
int t;
int v;
int all;
bool operator<(const LOWER&w){
if(w.all!=all) return w.all<all;
else {
if(w.v==v) return w.a>=a;
else return w.v<v;
}
}
}noblemen[N];
struct LOWEST{
string a;
int t;
int v;
int all;
bool operator<(const LOWEST&w){
if(w.all!=all) return w.all<all;
else {
if(w.v==v) return w.a>=a;
else return w.v<v;
}
}
}foolman[N];
struct LOWES{
string a;
int t;
int v;
int all;
bool operator<(const LOWES&w){
if(w.all!=all) return w.all<all;
else {
if(w.v==v) return w.a>=a;
else return w.v<v;
}
}
}smallman[N];
int main(){
int idxs=0,idxn=0,idxf=0,idxx=0;
int n,H,L;
cin>>n>>L>>H;
string s;
int a,b;
while(n--){
cin>>s>>a>>b;
if(a>=L&&b>=L){
if(a>=H&&b>=H){//sage
sage[idxs++]={s,b,a,b+a};
}
else if(a>=H&&b<H){ //君子
noblemen[idxn++]={s,b,a,b+a};
}
else {
if(a>=b){ //愚人
foolman[idxf++]={s,b,a,b+a};
}
else{ //小人
smallman[idxx++]={s,b,a,b+a};
}
}
}
}
sort(sage, sage+idxs);
sort(noblemen,noblemen+idxn);
sort(foolman,foolman+idxf);
sort(smallman,smallman+idxx);
cout<<idxs+idxx+idxf+idxn<<endl;
for(int i=0;i<idxs;i++) cout<<sage[i].a<<" "<<sage[i].v<<" "<<sage[i].t<<endl;
for(int i=0;i<idxn;i++) cout<<noblemen[i].a<<" "<<noblemen[i].v<<" "<<noblemen[i].t<<endl;
for(int i=0;i<idxf;i++) cout<<foolman[i].a<<" "<<foolman[i].v<<" "<<foolman[i].t<<endl;
for(int i=0;i<idxx;i++) cout<<smallman[i].a<<" "<<smallman[i].v<<" "<<smallman[i].t<<endl;
return 0;
}