1137 Final Grading (25分)

题目链接
知识点:排序、unordered_map


思路

1、理清规则,是否具有在线考试成绩,成绩如何计算等
2、设置mp数组将具有考试资格的学生进行排号,并将学生信息放入v中。期中期末成绩先置为-1,总成绩置为0
3、通过mp数组的对应关系,将mp[t]不为0的考生对应的期中期末成绩进行更新,要注意mp[t]=0的同学,有不具备考试资格的同学,也有0号同学,因此加入条件t==v[0].name


代码
#include <bits/stdc++.h>
using namespace std;
struct Node{
    string name;
    int gp,gm,gn,g;
};
bool cmp(Node a,Node b){return a.g!=b.g?a.g>b.g:a.name<b.name;}
int main()
{
    int p,m,n,a,num=0;
    string t;
    unordered_map<string,int> mp;
    vector<Node> v;
    scanf("%d %d %d",&p,&m,&n);
    for(int i=0;i<p;i++){
        cin>>t>>a;
        if(a>=200){
            mp[t]=num++;
            v.push_back({t,a,-1,-1,0});
        }
    }
    for(int i=0;i<m;i++){
        cin>>t>>a;
        if(mp[t]!=0||t==v[0].name) v[mp[t]].gm=a;
    }
    for(int i=0;i<n;i++){
        cin>>t>>a;
        if(mp[t]!=0||t==v[0].name) v[mp[t]].gn=a;
    }
    for(int i=0;i<v.size();i++){
        v[i].g=(v[i].gm>v[i].gn)?(int)(v[i].gm*0.4+v[i].gn*0.6+0.5):v[i].gn;
    }
    sort(v.begin(),v.end(),cmp);
    for(int i=0;i<v.size();i++){
        if(v[i].g>=60) printf("%s %d %d %d %d\n",v[i].name.c_str(),v[i].gp,v[i].gm,v[i].gn,v[i].g);
    }
}

卡住的点

1、unordered_map使用。和map差不多,但是不会消去重复元素
2、题中条件太多,没有理清规则
3、没有想到使用unordered_map进行学生和num之间的对照,导致不知道如何将gm、gn和对应的学生建立联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值