#include #include #include #include struct Result { std::string name; std::vector score; int score_sum = 0, last_ac = -1; }; int main() { using namespace std; int n; cin >> n; vector l(n); for (auto &e : l) { cin >> e; } map mp; vector result; vector solved(n, 0); auto calc_score = [&](int n, int k) -> int { return (50 * n) + (500 * n) / (8 + 2 * k); }; int t; cin >> t; for (int i = 0; i < t; i++) { string name; char p; cin >> name >> p; if (!mp.contains(name)) { mp[name] = result.size(); Result res; res.name = name; res.score.resize(n); result.push_back(res); } int id = mp[name], prob = p - 'A'; int s = calc_score(l[prob], ++solved[prob]); result[id].score[prob] += s; result[id].score_sum += s; result[id].last_ac = i; } sort(result.begin(), result.end(), [](const Result lhs, const Result rhs) { if (lhs.score_sum != rhs.score_sum) { return lhs.score_sum > rhs.score_sum; } else { return lhs.last_ac < rhs.last_ac; } }); int m = result.size(); for (int i = 0; i < m; i++) { auto res = result[i]; cout << i + 1 << " " << res.name << " "; for (int e : res.score) { cout << e << " "; } cout << res.score_sum << "\n"; } }