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

坑点:mp.size() 的值为2倍的映射数量,一开始v的尺寸初始化错误了
还有就是用来整体大小写转化
transform(temp_school.begin(), temp_school.end(), temp_school.begin(), ::tolower);
函数将对从输入参数的first1-last1的全部变量做op函数操作。结果保存到result中,或是通过返回值返回。

代码

  1. #include<string>
  2. #include<iostream>
  3. #include<map>
  4. #include<vector>
  5. #include<cstdio>
  6. #include<algorithm>
  7. using namespace std;
  8. struct School{
  9. int rank, nums, total2;
  10. double total1;
  11. string name;
  12. };
  13. double Cal(char a, double b){
  14. if(a == 'B') return b / 1.5;
  15. else if(a == 'A') return b;
  16. else if(a == 'T') return b * 1.5;
  17. }
  18. bool cmp(School a, School b){
  19. if(a.total2 != b.total2) return a.total2 > b.total2;
  20. else if(a.nums != b.nums) return a.nums < b.nums;
  21. else return a.name < b.name;
  22. }
  23. int main(){
  24. int n;
  25. string temp_id, temp_school;
  26. double temp_score;
  27. map<string, School > mp;
  28. scanf("%d", &n);
  29. for(int i = 0; i < n; i++){
  30. cin >> temp_id >> temp_score >> temp_school;
  31. transform(temp_school.begin(), temp_school.end(), temp_school.begin(), ::tolower);
  32. if(mp.find(temp_school) == mp.end()){
  33. mp[temp_school].name = temp_school;
  34. mp[temp_school].nums = 1;
  35. mp[temp_school].total1 = Cal(temp_id[0], temp_score);
  36. } else {
  37. mp[temp_school].nums++;
  38. mp[temp_school].total1 += Cal(temp_id[0], temp_score);
  39. }
  40. }
  41. vector<School> v;
  42. for(auto it = mp.begin(); it != mp.end(); it++){
  43. it->second.total2 = (int)it->second.total1;
  44. v.push_back(it->second);
  45. }
  46. sort(v.begin(), v.end(), cmp);
  47. cout << v.size() << endl;
  48. v[0].rank = 1;
  49. for(int i = 1; i < v.size(); i++){
  50. if(v[i].total2 == v[i - 1].total2) v[i].rank = v[i - 1].rank;
  51. else v[i].rank = i + 1;
  52. }
  53. for(int i = 0; i < v.size(); i++){
  54. cout << v[i].rank <<" "<< v[i].name <<" "<< v[i].total2 <<" "<< v[i].nums << endl;
  55. }
  56. return 0;
  57. }