题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805261493977088

写了半天发现map不可以排序,我真是B了狗了,柳是用了map进行简化,方法还是很好的
也不想再写了,就这样吧

代码

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <string>
  5. #include <map>
  6. using namespace std;
  7. struct node {
  8. string name;
  9. int gp, gm, gf, g;
  10. };
  11. bool cmp(node a, node b) {
  12. return a.g != b.g ? a.g > b.g : a.name < b.name;
  13. }
  14. map<string, int> idx;
  15. int main() {
  16. int p, m, n, score, cnt = 1;
  17. cin >> p >> m >> n;
  18. vector<node> v, ans;
  19. string s;
  20. for (int i = 0; i < p; i++) {
  21. cin >> s >> score;
  22. if (score >= 200) {
  23. v.push_back(node{s, score, -1, -1, 0});
  24. idx[s] = cnt++;
  25. }
  26. }
  27. for (int i = 0; i < m; i++) {
  28. cin >> s >> score;
  29. if (idx[s] != 0) v[idx[s] - 1].gm = score;
  30. }
  31. for (int i = 0; i < n; i++) {
  32. cin >> s >> score;
  33. if (idx[s] != 0) {
  34. int temp = idx[s] - 1;
  35. v[temp].gf = v[temp].g = score;
  36. if (v[temp].gm > v[temp].gf) v[temp].g = int(v[temp].gm * 0.4 + v[temp].gf * 0.6 + 0.5);
  37. }
  38. }
  39. for (int i = 0; i < v.size(); i++)
  40. if (v[i].g >= 60) ans.push_back(v[i]);
  41. sort(ans.begin(), ans.end(), cmp);
  42. for (int i = 0; i < ans.size(); i++)
  43. printf("%s %d %d %d %d\n", ans[i].name.c_str(), ans[i].gp, ans[i].gm, ans[i].gf, ans[i].g);
  44. return 0;
  45. }