1080 MOOC期终成绩 测试点3
易错点
测试点3:如果总评用float,测试点3会报错,换成int后能ac,原因不解
注意点
utility中的pair放到vector后用sort()可以对pair中的两个值进行自定义排序
代码
#include <iostream>
#include <cstdio>
#include <string>
#include <map>
#include <set>
#include <utility>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp_diy(pair<string,int> a,pair<string,int> b){
if(a.second!=b.second){
return a.second>b.second;
}
else{
return a.first<b.first;
}
}
int main()
{
int p,m,n;
map<string,int> mpa;
map<string,int> mpb;
map<string,int> mpc;
set<string> st;
pair<string,int> pa;
vector<pair<string,int> > vt;
string name;
int grade;
int tgrade;
cin>>p>>m>>n;
for(int i=0;i<p;i++){
cin>>name>>grade;
if(grade>=200){
mpa[name]=grade;
st.insert(name);
}
}
for(int i=0;i<m;i++){
cin>>name>>grade;
if(mpa.find(name)!=mpa.end()){
mpb[name]=grade;
}
}
for(int i=0;i<n;i++){
cin>>name>>grade;
if(mpa.find(name)!=mpa.end()){
mpc[name]=grade;
}
}
int tmp1,tmp2;
for(set<string>::iterator it=st.begin();it!=st.end();it++){
if(mpb.find(*it)==mpb.end()){
tmp1=0;
mpb[*it]=-1;
}
else{
tmp1=mpb[*it];
}
if(mpc.find(*it)==mpc.end()){
tmp2=0;
mpc[*it]=-1;
}
else{
tmp2=mpc[*it];
}
if(mpb[*it]>mpc[*it]){
tgrade=double(0.4*tmp1)+double(0.6*tmp2)+0.5;
}
else{
tgrade=mpc[*it];
}
if(tgrade>=60){
pa.first=*it;
pa.second=tgrade;
vt.push_back(pa);
}
}
sort(vt.begin(),vt.end(),cmp_diy);
for(int i=0;i<vt.size();i++){
cout<<vt[i].first<<" "<<mpa[vt[i].first]<<" "<<mpb[vt[i].first]<<" "<<mpc[vt[i].first]<<" "<<vt[i].second<<endl;
}
return 0;
}
参考
1080 MOOC期终成绩 (25 point(s)) (测试点三)_mob604756fa6ad7的技术博客_51CTO博客

浙公网安备 33010602011771号