/* -*- coding: utf-8 -*- * * 447.cc: No.447 ゆきこーだーの雨と雪 (2) - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 26; const int MAX_T = 4000; /* typedef */ typedef map msi; struct Stat { int id, sum, t; Stat() {} Stat(int _id, int _sum, int _t): id(_id), sum(_sum), t(_t) {} bool operator<(const Stat &s) const { return sum > s.sum || (sum == s.sum && t < s.t); } }; /* global variables */ int ls[MAX_N], acs[MAX_N], scs[MAX_T][MAX_N]; Stat ss[MAX_T]; string nms[MAX_T]; msi nmmap; /* subroutines */ /* main */ int main() { int n; cin >> n; for (int i = 0; i < n; i++) cin >> ls[i]; int t, m = 0; cin >> t; for (int i = 0; i < t; i++) { string nmi, pi; cin >> nmi >> pi; msi::iterator mit = nmmap.find(nmi); int id; if (mit == nmmap.end()) { id = nmmap[nmi] = m++; nms[id] = nmi; ss[id] = Stat(id, 0, 0); } else id = mit->second; int li = pi[0] - 'A'; scs[id][li] = 50 * ls[li] + (50 * ls[li]) * 5 / (4 + ++acs[li]); ss[id].sum += scs[id][li]; ss[id].t = i; } sort(ss, ss + m); for (int i = 0; i < m; i++) { Stat &si = ss[i]; printf("%d %s", i + 1, nms[si.id].c_str()); for (int j = 0; j < n; j++) printf(" %d", scs[si.id][j]); printf(" %d\n", si.sum); } return 0; }