【题意】
对结构体的排序问题
【思路】
对于圣人、君子、愚人、小人设置一个排序的优先级即可
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
typedef struct{
char id[9];
int v_g;
int t_g;
int total;
int label;
}person;
bool cmp(person p1, person p2){
if(p1.label>p2.label){
return 1;
}
else if(p1.label==p2.label && p1.total>p2.total){
return 1;
}
else if(p1.label==p2.label && p1.total==p2.total && p1.v_g>p2.v_g){
return 1;
}
else if(p1.label==p2.label && p1.total==p2.total && p1.v_g==p2.v_g && strcmp(p1.id,p2.id)<0){
return 1;
}
return 0;
}
int main(int argc, char const *argv[])
{
vector<person> persons;
int n,l,h;
scanf("%d%d%d", &n, &l, &h);
while(n--){
char id[9];
int v_g,t_g;
scanf("%s%d%d", id, &v_g, &t_g);
if(v_g<l || t_g<l){
continue;
}
person tmp;
strcpy(tmp.id,id);
tmp.v_g = v_g;
tmp.t_g = t_g;
tmp.total = v_g+t_g;
if(v_g>=h){
if(t_g>=h){
tmp.label = 4;
}
else{
tmp.label = 3;
}
}
else if(t_g<h && v_g>=t_g){
tmp.label = 2;
}
else{
tmp.label = 1;
}
persons.push_back(tmp);
}
sort(persons.begin(),persons.end(),cmp);
printf("%d", persons.size());
for(vector<person>::iterator it=persons.begin(); it!=persons.end(); it++){
printf("\n%s %d %d", (*it).id, (*it).v_g, (*it).t_g);
}
system("pause");
return 0;
}