思路: 模拟即可。
代码:
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
struct node {
string name;
int gp = -1;
int gmid = -1;
int gfinal = -1;
int g = -1;
};
set<string>peo_name;
map<string, node>peo_data;
vector<node>v;
bool cmp(node x, node y)
{
if (x.g != y.g)
return x.g > y.g;
return x.name < y.name;
}
int main()
{
int p, n, m;
cin >> p >> m >> n;
for (int i = 0; i < p; ++i)
{
string name;
int gp;
cin >> name >> gp;
peo_data[name].gp = gp;
peo_data[name].name = name;
peo_name.insert(name);
}
for (int i = 0; i < m; ++i)
{
string name;
int gmid;
cin >> name >> gmid;
peo_data[name].gmid = gmid;
peo_data[name].name = name;
peo_name.insert(name);
}
for (int i = 0; i < n; ++i)
{
string name;
int gfinal;
cin >> name >> gfinal;
peo_data[name].gfinal = gfinal;
peo_data[name].name = name;
peo_name.insert(name);
}
set<string>::iterator it = peo_name.begin();
while (it != peo_name.end())
{
if (peo_data[*it].gfinal > peo_data[*it].gmid)
peo_data[*it].g = peo_data[*it].gfinal;
else
{
// cout << *it << peo_data[*it].gfinal * 0.6 + peo_data[*it].gmid + 0.4 + 0.5 << endl;
peo_data[*it].g = (int)(peo_data[*it].gfinal * 0.6 + peo_data[*it].gmid * 0.4 + 0.5);
}
if (peo_data[*it].gp >= 200 && peo_data[*it].g >= 60)
v.push_back(peo_data[*it]);
it++;
}
sort(v.begin(), v.end(), cmp);
for (int i = 0; i < v.size(); ++i)
{
cout << v[i].name << " " << v[i].gp << " " << v[i].gmid << " " << v[i].gfinal << " " << v[i].g;
if (i < v.size() - 1)
cout << endl;
}
return 0;
}