解题代码
#include<cstdio>
#include<vector>
#include<string>
#include<unordered_map>
#include<algorithm>
#include<cctype>
using namespace std;
struct stu {
int score, cnt;
string school;
};
unordered_map<string, pair<double,int> > m;
bool cmp(stu a,stu b) {
if (a.score != b.score) return a.score > b.score;
if (a.cnt != b.cnt) return a.cnt < b.cnt;
return a.school < b.school;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
string str, school;
str.resize(6);
school.resize(6);
double score;
scanf("%s %lf %s", str.c_str(), &score, school.c_str());
for (int j = 0; j < school.length(); j++)
if (school[j] >= 'A' && school[j] <= 'Z') school[j] =tolower(school[j]);
if (str[0] == 'B') score /= 1.5;
else if (str[0] == 'T') score *= 1.5;
m[school].first += score;
m[school].second++;
}
vector<stu> v;
for (auto x : m) v.push_back(stu{(int)(x.second.first),x.second.second,x.first});
sort(v.begin(), v.end(), cmp);
printf("%d", v.size());
int temp;
for (int i = 0; i < v.size(); i++) {
if (!i || v[i].score != v[i - 1].score) {
printf("\n%d", i + 1);
temp = i + 1;
}
else printf("\n%d", temp);
printf(" %s %d %d", v[i].school.c_str(), v[i].score, v[i].cnt);
}
return 0;
}
测试结果
问题整理
1.基础题目。