#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++) #define rep(i,n) repl(i,0,n) #define mp(a,b) make_pair((a),(b)) #define pb(a) push_back((a)) #define all(x) (x).begin(),(x).end() #define dbg(x) cout<<#x"="<<(x)< scores; bool operator<(const person& r) const{ if(total==r.total) return last r.total; } }; int main(){ int n; cin>>n; vector l(n); rep(i,n) scanf("%d", &l[i]); int t; cin>>t; map > vec; // 名前-> 各問の回答順, vec[n]は最後の回答順番 vector solved(n,0); // 各問題でこれまで何人正解者がいるか // 入力受け取る rep(i,t){ string str1, str2; cin>>str1>>str2; if(vec.find(str1)==vec.end()) vec.insert(mp(str1, vector(n+1,INF)) ); vec[str1][str2[0]-'A'] = solved[str2[0]-'A']++; vec[str1][n]=i; } // 各人のスコアを計算し,ソート vector score; for(auto v : vec){ vector nvec(n); int total=0; rep(i,n){ if( (v.se)[i] != INF) nvec[i] = (50*l[i]) + (50.*l[i])/(0.8 + 0.2*((v.se)[i]+1)); else nvec[i] = 0; total += nvec[i]; } score.push_back(person{v.fi, v.se[n], total, nvec}); } sort(all(score)); // 出力 rep(i,score.size()){ cout<