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博客

posted @ 2022-07-13 11:23  qwasdasd  阅读(66)  评论(0)    收藏  举报