#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i, n) for (int (i) = 0; (i) < (n); (i)++) #define FOR(i, a, b) for (int (i) = (a); (i) < (b); (i)++) #define RREP(i, a) for(int (i) = (a) - 1; (i) >= 0; (i)--) #define FORR(i, a, b) for(int (i) = (a) - 1; (i) >= (b); (i)--) #define DEBUG(C) cerr << #C << " = " << C << endl; using LL = long long; using VI = vector; using VVI = vector; using VL = vector; using VVL = vector; using VD = vector; using VVD = vector; using PII = pair; using PDD = pair; using PLL = pair; using VPII = vector; template using VT = vector; #define ALL(a) begin((a)), end((a)) #define RALL(a) rbegin((a)), rend((a)) #define SORT(a) sort(ALL((a))) #define RSORT(a) sort(RALL((a))) #define REVERSE(a) reverse(ALL((a))) #define MP make_pair #define FORE(a, b) for (auto &&a : (b)) #define FIND(s, e) ((s).find(e) != (s).end()) #define EB emplace_back const int INF = 1e9; const int MOD = INF + 7; const LL LLINF = 1e18; int calcScore(double star, double rank) { return (50.0 * star) + (50.0 * star / (0.8 + (0.2 * rank))); } bool comp(const tuple &l, const tuple &r) { int l1, l2, r1, r2;string l3, r3; tie(l1, l2, l3) = l;tie(r1, r2, r3) = r; if (l1 != r1) return l1 > r1; return l2 < r2; } int main(void) { int N; cin >> N; VI level(N), cnt(N, 0); for_each(ALL(level), [](int &e){cin >> e;}); int T; cin >> T; VT> nameAndProblem(T); map, int> score; //[MP(name, problemNum)] = score map lastAcTime;//[name] = lastAcTime map ansScore;//[name][problemNum] = score REP(i, T) { string s, p; cin >> s >> p; nameAndProblem[i] = MP(s, p[0] - 'A'); lastAcTime[s] = i; score[nameAndProblem[i]] = calcScore(level[p[0] - 'A'], ++cnt[p[0] - 'A']); if (!FIND(ansScore, s)) ansScore[s].resize(N, 0); ansScore[s][p[0] - 'A'] = score[nameAndProblem[i]]; } vector> ans;// FORE(el, ansScore) { ans.EB(make_tuple(accumulate(ALL(el.second), 0), lastAcTime[el.first], el.first)); } sort(ALL(ans), comp); REP(i, ans.size()) { int sum, lat;string name; tie(sum, lat, name) = ans[i]; cout << i + 1 << " " << name << " "; FORE(e, ansScore[name]) cout << e << " "; cout << sum << endl; } return 0; }