题目分析
代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
enum TestLevel { T, A, B };
struct Registration {
string id;
int score;
};
//按照分数降序排列,分数相同时按照id升序排列
bool cmp(Registration& a, Registration& b) {
return a.score == b.score ? a.id < b.id : a.score > b.score;
}
int N, M;
int main()
{
cin >> N >> M;
vector< Registration> v(N);
for (int i = 0; i < N; i++) {
cin >> v[i].id >> v[i].score;
}
int t; string a;
int c = 0;
for (int i = 0; i < M; i++) {
cin >> t >> a;
printf("Case %d: %d %s\n", ++c, t, a.c_str());
vector<Registration> ans;
ans.clear();
if (t == 1) {
for (auto i : v) {
if (i.id.substr(0, 1) == a) {
ans.push_back(i);
}
}
if (ans.size() == 0) {
printf("NA\n");
continue;
}
sort(ans.begin(), ans.end(), cmp);
for (auto i : ans) {
printf("%s %d\n", i.id.c_str(), i.score);
}
}
else if (t == 2) {
int cnt = 0, s = 0;
for (auto i : v) {
if (i.id.substr(1, 3) == a) {
cnt++;
s += i.score;
}
}
if (cnt == 0) {
printf("NA\n");
continue;
}
printf("%d %d\n", cnt, s);
}
else if (t == 3) {
unordered_map<string, int> ans3;
for (auto i : v) {
if (i.id.substr(4,6) == a) {
ans3[i.id.substr(1, 3)]++;
}
}
if (ans3.size() == 0) {
printf("NA\n");
continue;
}
for (auto it : ans3) {
ans.push_back({ it.first,it.second });
}
sort(ans.begin(), ans.end(), cmp);
for (auto i : ans) {
printf("%s %d\n", i.id.c_str(), i.score);
}
}
}
}
参考