PAT乙级1080 MOOC期终成绩 (25 分)
这道题我卡测试点3卡了挺久,网上搜了很多答案,都说测试点3是排序的问题,然而我的排序并没有问题。
后来反复测试,发现是我的输出问题,即期中和期末成绩刚开始没有初始化。
#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;
}