解题思路:借鉴了柳诺了柳诺的代码,具体思路可以看她的
PAT 1085. PAT单位排行 (25) - 乙级_柳婼的博客-CSDN博客
#include<bits/stdc++.h>
using namespace std;
struct node {
string school;
int tws, ns;
};
bool cmp(node a, node b) {
if (a.tws != b.tws)
return a.tws > b.tws;
else if (a.ns != b.ns)
return a.ns < b.ns;
else
return a.school < b.school;
}
int main() {
int n;
cin>>n;
unordered_map<string, int> cnt;
unordered_map<string, double> sum;
for (int i = 0; i < n; i++) {
string id, school;
cin >> id;
double score;
cin>>score;
cin >> school;
for (int j = 0; j < school.size(); j++)
school[j] = tolower(school[j]);
if (id[0] == 'B')
score = score / 1.5;
else if (id[0] == 'T')
score = score * 1.5;
sum[school] += score;
cnt[school]++;
}
vector<node> ans;
for (auto it = cnt.begin(); it != cnt.end(); it++)
ans.push_back(node{it->first, (int)sum[it->first], it->second});
sort(ans.begin(), ans.end(), cmp);
int rank = 0, pres = -1;
printf("%d\n", ans.size());
for (int i = 0; i < ans.size(); i++) {
if (pres != ans[i].tws)
rank = i + 1;
pres = ans[i].tws;
printf("%d ", rank);
cout << ans[i].school;
printf(" %d %d\n", ans[i].tws, ans[i].ns);
}
}