#include int count[26]; main(){ char name[4000][17]; int N,T,L[26],point[4000][28],num=0;//point[26]は最後の提出//27は合計 scanf("%d",&N); for(int i = 0;i < N;i++)scanf("%d",&L[i]); scanf("%d",&T); for(int i = 0;i < T;i++){ char S[17],c; scanf("%s%*c%c",S,&c); for(int j = 0;j < 4000;j++){ if(!strcmp(name[j],S)){ point[j][c-'A'] = 50*L[c-'A']+500*L[c-'A']/(8+(++count[c-'A'])*2); point[j][26] = i; point[j][27] += point[j][c-'A']; goto skip; } } strcpy(name[num],S); point[num][c-'A'] = 50*L[c-'A']+500*L[c-'A']/(8+(++count[c-'A'])*2); point[num][26] = i; point[num][27] = point[num][c-'A']; num++; skip:i += 0; } int number[4000],last[4000],sum[4000]; for(int i = 0;i < num;i++){ number[i] = i; last[i] = point[i][26]; sum[i] = point[i][27]; } using std::swap; for(int i = 0;i < num;i++){ for(int j = i+1;j < num;j++){ if(sum[i] < sum[j] || (sum[i] == sum[j] && last[i] > last[j])){ swap(sum[i],sum[j]); swap(last[i],last[j]); swap(number[i],number[j]); } } } for(int i = 0;i < num;i++){ printf("%d %s",i+1,name[number[i]]); for(int j = 0;j < N;j++){ printf(" %d",point[number[i]][j]); } printf(" %d\n",point[number[i]][27]); } }