题解
大数据 |
---|
又是一道大数据的题目 |
我总是喜欢把全部的数据放到一个结构体变量里,其实有时候分开存变量也挺好的 |
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;
}