//土尔逊Torson 编写于2023/4/12
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <algorithm>
#include <stdlib.h>
using namespace std;
struct nation { //定义参加奥运会的国家参数
int aNum; //国家序号
int goldMedal; //金牌数
int medal; //奖牌数
int population;//million //人口(百万)
double goldRatioPop; //金牌人口比例
double medalRationPop; //奖牌人口比例
int Rate_1_goldMedal; //金牌总数 排名
int Rate_2_medal; //奖牌总数 排名
int Rate_3_goldRatioPop; //金牌人口比例 排名
int Rate_4_medalRationPop; //奖牌人口比例 排名
};
bool comp0301(nation left, nation right) {//金牌总数 排名
if (left.goldMedal > right.goldMedal) {
return true;
}
else if (left.goldMedal == right.goldMedal && left.aNum < right.aNum) {
return true;
}
else {
return false;
}
}
bool comp0302(nation left, nation right) {//奖牌总数 排名
if (left.medal > right.medal) {
return true;
}
else if (left.medal == right.medal && left.aNum < right.aNum) {
return true;
}
else {
return false;
}
}
bool comp0303(nation left, nation right) {//金牌人口比例 排名
if (left.goldRatioPop > right.goldRatioPop) {
return true;
}
else if (left.goldRatioPop == right.goldRatioPop && left.aNum < right.aNum) {
return true;
}
else {
return false;
}
}
bool comp0304(nation left, nation right ) {//奖牌人口比例 排名
if (left.medalRationPop > right.medalRationPop) {
return true;
}
else if (left.medalRationPop == right.medalRationPop && left.aNum < right.aNum) {
return true;
}
else {
return false;
}
}
int main() {
int N;
int M;
int arrM[30];
nation state[30];
while (scanf("%d %d", &N,&M) != EOF) {//获得 多组 第一行给出国家数N,要求排名的国家数M
int aNum = 0;
for (int i = 0; i < N; ++i) { //获得 国家各项参数,和初始化部分参数
scanf("%d %d %d", &state[i].goldMedal, &state[i].medal, &state[i].population);
state[i].goldRatioPop = (double)state[i].goldMedal / (double)state[i].population;
state[i].medalRationPop = (double)state[i].medal / (double)state[i].population;
state[i].Rate_1_goldMedal = -1;
state[i].Rate_2_medal = -1;
state[i].Rate_3_goldRatioPop = -1;
state[i].Rate_4_medalRationPop = -1;
state[i].aNum = aNum;
++aNum;
}
for (int j = 0; j < M; ++j) {
scanf("%d", &arrM[j]);
}
sort(state, state + N, comp0301);//金牌总数 排名 和记录排名
for (int i = 0; i < N; ++i) {
if (i == 0) {
state[i].Rate_1_goldMedal = i + 1;
}
else if (state[i].goldMedal == state[i - 1].goldMedal) {
state[i].Rate_1_goldMedal = state[i - 1].Rate_1_goldMedal;
}
else {
state[i].Rate_1_goldMedal = i + 1;
}
}
sort(state, state + N, comp0302);//奖牌总数 排名 和记录排名
for (int i = 0; i < N; ++i) {
if (i == 0) {
state[i].Rate_2_medal = i + 1;
}
else if (state[i].medal == state[i - 1].medal) {
state[i].Rate_2_medal = state[i - 1].Rate_2_medal;
}
else {
state[i].Rate_2_medal = i + 1;
}
}
sort(state, state + N, comp0303);//金牌人口比例 排名 和记录排名
for (int i = 0; i < N; ++i) {
if (i == 0) {
state[i].Rate_3_goldRatioPop = i + 1;
}
else if (state[i].goldRatioPop == state[i - 1].goldRatioPop) {
state[i].Rate_3_goldRatioPop = state[i - 1].Rate_3_goldRatioPop;
}
else {
state[i].Rate_3_goldRatioPop = i + 1;
}
}
sort(state, state + N, comp0304);//奖牌人口比例 排名 和记录排名
for (int i = 0; i < N; ++i) {
if (i == 0) {
state[i].Rate_4_medalRationPop = i + 1;
}
else if (state[i].medalRationPop == state[i - 1].medalRationPop) {
state[i].Rate_4_medalRationPop = state[i - 1].Rate_4_medalRationPop;
}
else {
state[i].Rate_4_medalRationPop = i + 1;
}
}
//测试和调解BUG
//for (int i = 0; i < N; ++i) {
// printf("%d %d %d %d %.2lf %.2f %d %d %d %d\n", state[i].aNum, state[i].goldMedal, state[i].medal, state[i].population, state[i].goldRatioPop, state[i].medalRationPop,
// state[i].Rate_1_goldMedal, state[i].Rate_2_medal, state[i].Rate_3_goldRatioPop, state[i].Rate_4_medalRationPop);
//}
//按格式要求输出计算数据
for (int i = 0; i < M; ++i) {
for (int j = 0; j < N; ++j) {
if (arrM[i] == state[j].aNum) {
if (state[j].Rate_1_goldMedal <= state[j].Rate_2_medal
&& state[j].Rate_1_goldMedal <= state[j].Rate_3_goldRatioPop
&& state[j].Rate_1_goldMedal <= state[j].Rate_4_medalRationPop) {
printf("%d:1\n", state[j].Rate_1_goldMedal);
}
else if (state[j].Rate_2_medal <= state[j].Rate_3_goldRatioPop
&& state[j].Rate_2_medal <= state[j].Rate_4_medalRationPop) {
printf("%d:2\n", state[j].Rate_2_medal);
}
else if (state[j].Rate_3_goldRatioPop <= state[j].Rate_4_medalRationPop) {
printf("%d:3\n", state[j].Rate_3_goldRatioPop);
}
else {
printf("%d:4\n", state[j].Rate_4_medalRationPop);
}
}
}
}
}
system("pause");
return EXIT_SUCCESS;
}
// 64 位输出请用 printf("%lld")