1036 Boys vs Girls (25分)
作者:互联网
题目大意:给出n个学生的姓名、性别、ID和成绩。求取得最高分的女生和最低分的男生。分别输出两人的姓名、ID,以及女生成绩减去男生成绩的差。
思路:此处给出两种解法。
- 使用两个优先队列分别来维护男生和女生的信息。男生队列中成绩低者位于队首,女生队列中成绩高者位于队首。
- 使用一个vector来存储学生信息,最后按照性别升序、成绩降序进行排序,这样第一个就是女生成绩最高者,最后一个就是男生成绩最低者。
代码:
优先队列
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct Female{
string name,id;
int sc;
Female(){}
Female(string name,string id,int sc): name(name),id(id),sc(sc){}
bool operator <(const Female &a)const{
return sc<a.sc;
}
};
struct male{
string name,id;
int sc;
male(){}
male(string name,string id,int sc): name(name),id(id),sc(sc){}
bool operator <(const male &a)const{
return sc>a.sc;
}
};
int main()
{
priority_queue<Female> f;
priority_queue<male> m;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
string name,gender,id; int sc;
cin>>name>>gender>>id>>sc;
if(gender=="M") m.push(male(name,id,sc));
else f.push(Female(name,id,sc));
}
int flag=0;
if(f.empty()){flag=1; printf("Absent\n");}
else printf("%s %s\n",f.top().name.c_str(),f.top().id.c_str());
if(m.empty()){flag=1; printf("Absent\n");}
else printf("%s %s\n",m.top().name.c_str(),m.top().id.c_str());
if(flag) printf("NA\n");
else printf("%d\n",f.top().sc-m.top().sc);
return 0;
}
vector
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
struct Node{
string name,gen,id;
int sc;
Node(){}
Node(string name,string gen,string id,int sc): name(name),gen(gen),id(id),sc(sc){}
};
vector<Node> v;
bool cmp(const Node &a,const Node &b){
if(a.gen==b.gen) return a.sc>b.sc;
return a.gen<b.gen;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
string name,id,gen; int sc;
cin>>name>>gen>>id>>sc;
v.push_back(Node(name,gen,id,sc));
}
sort(v.begin(),v.end(),cmp);
if(v.empty()) printf("Absent\nAbsent\nNA\n");
else{
int flag=0;
if(v[0].gen!="F"){flag=1; printf("Absent\n");}
else printf("%s %s\n",v[0].name.c_str(),v[0].id.c_str());
if(v[v.size()-1].gen!="M"){flag=1; printf("Absent\n");}
else printf("%s %s\n",v[v.size()-1].name.c_str(),v[v.size()-1].id.c_str());
if(flag) printf("NA\n");
else printf("%d\n",v[0].sc-v[v.size()-1].sc);
}
return 0;
}
标签:name,int,Boys,vs,printf,sc,1036,id,string 来源: https://blog.csdn.net/Ai_Mijie/article/details/113405930