1080 MOOC期终成绩 大数据处理

题解

大数据
又是一道大数据的题目
我总是喜欢把全部的数据放到一个结构体变量里,其实有时候分开存变量也挺好的
1. 定义一个map,用id 和 id的全部属性作映射
2. 3个输入,第一个输入的时候,把Gf和Gm都置为-1,如果后面他们两个没有输入,也就直接是-1了
第二个输入判断Gp输入了没有(利用map判断),没有的话也置为-1
输入第三个的时候要判断gf和gm谁大
3. gm > gf就得四舍五入
做完我看了柳神的题解,我以前想的判断四舍五入简直是too low
int(x + 0.5)这样就完成了
4. 我将判断总分大于等于60和上机分大于等于200放到了后面
单独定义了一个和map结构体类型一样的vector,依次加入到vector,加入的时候判断是否可以加入,然后sort,直接输出

Code

#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>
using namespace std;
struct node
{
    string id;
    int Gp, Gmid, Gf;
    double sum;
};
int main()
{
    int N, M, K;
    cin >> N >> M >> K;
    unordered_map<string, node> rap;
    string id;
    int x;
    while (N--)
    {
        cin >> id >> x;
        rap[id].id = id;
        rap[id].Gp = x;
        rap[id].Gf = -1;
        rap[id].Gmid = -1;
    }
    while (M--)
    {
        cin >> id >> x;
        if (rap.count(id) == 0)
            rap[id].Gp = -1;
        rap[id].Gmid = x;
        rap[id].id = id;
        rap[id].sum = x * 0.4;
    }
    while (K--)
    {
        cin >> id >> x;
        rap[id].Gf = x;
        rap[id].id = id;
        if (rap[id].Gmid > x)
        {
            rap[id].sum += x * 0.6;
            rap[id].sum = int(rap[id].sum + 0.5);
        }
        else
            rap[id].sum = x;
    }
    vector<node> v;
    for (auto e : rap)
    {
        if (e.second.Gp >= 200 && e.second.sum >= 60)
        {
            v.push_back({e.second});
        }
    }
    auto cmp = [](node &e1, node &e2) {
        if (e1.sum == e2.sum)
            return e1.id < e2.id;
        return e1.sum > e2.sum;
    };
    sort(v.begin(), v.end(), cmp);
    for (auto e : v)
    {
        cout << e.id << " " << e.Gp << ' ' << e.Gmid << ' ' << e.Gf << ' ' << e.sum << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值