PAT乙级1080 MOOC期终成绩 (25 分)

这道题我卡测试点3卡了挺久,网上搜了很多答案,都说测试点3是排序的问题,然而我的排序并没有问题。

后来反复测试,发现是我的输出问题,即期中和期末成绩刚开始没有初始化。

PAT乙级1080 MOOC期终成绩 (25 分)

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
struct student{
	int G;
	int G_mid;
	int G_final;
	int zx;
	string name;
}stu;
bool cmp(student s1,student s2){
	if(s1.G!=s2.G){
		return s1.G>s2.G;
	}else return s1.name<s2.name;
}
int main(){
	int i,P,M,N;
	string str;
	int score;
	cin>>P>>M>>N;
	map<string,student> mp;
	vector<student> v;
	for(i=0;i<P;i++){
		cin>>str>>score;

		if(score>=200){
			mp[str].zx=score;
			mp[str].name=str;
			mp[str].G_mid=-1;      //不初始化会导致测试点3答案错误
			mp[str].G_final=-1;
		}
	}
	for(i=0;i<M;i++){
		cin>>str>>score;
		if(mp.find(str)!=mp.end()){
			mp[str].G_mid=score;
		}
	}

	for(i=0;i<N;i++){
		cin>>str>>score;
		if(mp.find(str)!=mp.end()){     //如果找到
			mp[str].G_final=score;
			if(mp[str].G_mid>mp[str].G_final){    //计算总评
				mp[str].G=int(mp[str].G_mid*0.4+mp[str].G_final*0.6+0.5);
			}else{
				mp[str].G=score;
			}
			if(mp[str].G>=60){
				v.push_back(mp[str]);
			}
		}
	}
	sort(v.begin(),v.end(),cmp);
	for(i=0;i<v.size();i++){
		cout<<v[i].name;
		printf(" %d %d %d %d\n",v[i].zx,v[i].G_mid,v[i].G_final,v[i].G);
	}
	return 0;
}