PAT1137 Final Grading 两个测试点不通过,仔细读题

第一遍没有仔细看题目,题干中提到的最终成绩不小于60,不是指Gfinal不小于60,而是计算后的G不小于60,卡了好久了,半天没看出哪里问题,final grade 和Gfinal太误导人了

怪自己太菜了≡(▔﹏▔)≡,下面是AC代码

#include
#include
#include
#include
#include
using namespace std;
struct student{//最终分数向上取整
    string id;
    int gp,gmid,gfinal;
    int gg;
    student(){gmid=-1;gfinal=-1;}
}st[10005];
//有个特别大的坑,最终成绩大于60,指的是G,而不是Gfinal
unordered_map sti;//学生id到数组下标的映射
int cnt=1;
bool cmp(int a,int b)
{
    if(st[a].gg!=st[b].gg)return st[a].gg>st[b].gg;
    else return st[a].id>p>>m>>n;
    for(int i=0;i>id>>grade;
        if(grade>=200)//合格成绩
        {
            sti[id]=cnt++;
            st[sti[id]].id=id;
            st[sti[id]].gp=grade;
        }
    }
    for(int i=0;i>id>>grade;
        if(sti[id]!=0)//存在合格的gp成绩
        {
            st[sti[id]].gmid=grade;
        }
    }
    for(int i=0;i>id>>grade;
        if(sti[id]!=0)
        {
            st[sti[id]].gfinal=grade;
        }
    }
    vector result;
    for(unordered_map::iterator it=sti.begin();it!=sti.end();it++)
    {
        if(it->second!=0)
        {
            int tem=it->second;
            if(st[tem].gmid>st[tem].gfinal)st[tem].gg=(st[tem].gmid*0.4+st[tem].gfinal*0.6+0.5);
            else st[tem].gg=st[tem].gfinal;
            if(st[tem].gg>=60)
            result.push_back(it->second);
        }
    }
    sort(result.begin(),result.end(),cmp);
    for(int i=0;i

 

你可能感兴趣的:(PAT甲级)