PAT A 1137 AC代码

用了一个map在读取Gp的时候进行id和标号的对应,之后两组数据如果这个id没读取过Gp就直接continue(continue之前把数据输入做了,不然会错位)

计算最终成绩的时候题目实际要求四舍五入,用一下round(double(x)); (相应还有floor和ceil,都应该熟练)

sort配合cmp是神器,也应熟练使用。

#include<iostream>
#include<vector>
#include<unordered_map>
#include<cmath>
#include<algorithm>
using namespace std;
struct node{
	string id;
	int Gp=-1,Gm=-1,Gf=-1,G=-1;
};
unordered_map<string,int> id_tag;
bool cmp(const node a,const node b){
	if(a.G==b.G){
		return a.id<b.id;
	}else{
		return a.G>b.G;
	}
} 
int P,M,N;
int main(){
	cin>>P>>M>>N;
	vector<node> Node(10000);
	for(int i=0;i<P;i++){
		cin>>Node[i].id>>Node[i].Gp;
		id_tag[Node[i].id]=i;
	}
	for(int i=0;i<M;i++){
		string x;
		int mid;
		cin>>x>>mid;
		if(id_tag.find(x)==id_tag.end()) continue;
		Node[id_tag[x]].Gm=mid;
	}
	for(int i=0;i<N;i++){
		string x;
		int final;
		cin>>x>>final;
		if(id_tag.find(x)==id_tag.end()) continue;
		int index=id_tag[x];
		Node[index].Gf=final;
		if(Node[index].Gm>Node[index].Gf){
			Node[index].G=(int)round(Node[index].Gf*0.6+Node[index].Gm*0.4);
		}else{
			Node[index].G=Node[index].Gf;
		}
	}
	sort(Node.begin(),Node.end(),cmp);
	for(int i=0;i<id_tag.size();i++){
		if(Node[i].Gp>=200&&Node[i].G>=60){
			cout<<Node[i].id<<" "<<Node[i].Gp<<" "<<Node[i].Gm<<" "<<Node[i].Gf<<" "<<Node[i].G<<endl;
		}
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值