Description
按要求,给国家进行排名。
Input
有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。
Output
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例
对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。
Sample Input
4 4 4 8 1 6 6 2 4 8 2 2 12 4 0 1 2 3 4 2 8 10 1 8 11 2 8 12 3 8 13 4 0 3
Sample Output
1:3 1:1 2:1 1:2 1:1 1:1
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
typedef struct{
int id, gold, medal;
double pop, ggp, gmp;
}nation;
nation temp[1005], a[1005], b[1005], c[1005], d[1005];
int f[1005];
// 金牌
bool cmp_g(nation a, nation b){
return a.gold > b.gold;
}
// 奖牌
bool cmp_m(nation a, nation b){
return a.medal > b.medal;
}
// 人均金牌
bool cmp_ggp(nation a, nation b){
return a.ggp > b.ggp;
}
// 人均奖牌
bool cmp_gmp(nation a, nation b){
return a.gmp > b.gmp;
}
int main()
{
int n, m;
int r;
int min_rank, min_mode;
while (~scanf("%d %d", &n, &m)){
for (int i = 1; i <= n; i++){
scanf("%d %d %lf", &temp[i].gold, &temp[i].medal, &temp[i].pop);
temp[i].id = i-1;
temp[i].ggp = temp[i].gold / temp[i].pop;
temp[i].gmp = temp[i].medal / temp[i].pop;
}
for (int i = 1; i <= m; i++){
scanf("%d", &f[i]);
a[i] = b[i] = c[i] = d[i] = temp[f[i]+1];
}
sort(a+1, a+m+1, cmp_g);
sort(b+1, b+m+1, cmp_m);
sort(c+1, c+m+1, cmp_ggp);
sort(d+1, d+m+1, cmp_gmp);
for (int i = 1; i <= m; i++){
min_rank = 1, min_mode = 1;
r = 0;
for (int j = 1; j <= m; j++){
if (a[j].gold != a[j-1].gold)
r = j;
if (a[j].id == f[i])
break;
}
min_rank = r;
for (int j = 1; j <= m; j++){
if (b[j].medal != b[j-1].medal)
r = j;
if (b[j].id == f[i])
break;
}
if (r < min_rank)
min_rank = r, min_mode = 2;
for (int j = 1; j <= m; j++){
if (c[j].ggp != c[j-1].ggp)
r = j;
if (c[j].id == f[i])
break;
}
if (r < min_rank)
min_rank = r, min_mode = 3;
for (int j = 1; j <= m; j++){
if (d[j].gmp != d[j-1].gmp)
r = j;
if (d[j].id == f[i])
break;
}
if (r < min_rank)
min_rank = r, min_mode = 4;
printf("%d:%d\n", min_rank, min_mode);
}
printf("\n");
}
return 0;
}