按要求,给国家进行排名。
输入描述:
有多组数据。 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。 第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。 接下来一行给出M个国家号。
输出描述:
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名 格式为: 排名:排名方式 如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例 如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4. 每组数据后加一个空行。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 40
struct Info
{
int jinpai;
int jiangpai;
int renkou;
int id;
double bili1;
double bili2;
};
struct Info2
{
int paiming;
int type;
};
struct Info p[1010];
struct Info t[1010];
struct Info2 rank[1010];
int arr[1010];
void sort1(int n,struct Info p[])
{
int i,j,k;
for(i=0;i<n;i++)
{
k=i;
for(j=i;j<n;j++)
{
if(p[j].jinpai>p[k].jinpai)
{
k=j;
}
}
struct Info temp=p[i];
p[i]=p[k];
p[k]=temp;
}
int cnt=1;
rank[p[0].id].paiming=cnt;
rank[p[0].id].type=1;
for(i=1;i<n;i++)
{
if(p[i-1].jinpai!=p[i].jinpai)
{
cnt=i+1;
}
if(rank[p[i].id].paiming>cnt)
{
rank[p[i].id].paiming=cnt;
rank[p[i].id].type=1;
}
}
}
void sort2(int n,struct Info p[])
{
int i,j,k;
for(i=0;i<n;i++)
{
k=i;
for(j=i;j<n;j++)
{
if(p[j].jiangpai>p[k].jiangpai)
{
k=j;
}
}
struct Info temp=p[i];
p[i]=p[k];
p[k]=temp;
}
int cnt=1;
if(rank[p[0].id].paiming>cnt)
{
rank[p[0].id].paiming=cnt;
rank[p[0].id].type=2;
}
for(i=1;i<n;i++)
{
if(p[i-1].jiangpai!=p[i].jiangpai)
{
cnt=i+1;
}
if(rank[p[i].id].paiming>cnt)
{
rank[p[i].id].paiming=cnt;
rank[p[i].id].type=2;
}
}
}
void sort3(int n,struct Info p[])
{
int i,j,k;
for(i=0;i<n;i++)
{
k=i;
for(j=i;j<n;j++)
{
if(p[j].bili1>p[k].bili1)
{
k=j;
}
}
struct Info temp=p[i];
p[i]=p[k];
p[k]=temp;
}
int cnt=1;
if(rank[p[0].id].paiming>cnt)
{
rank[p[0].id].paiming=cnt;
rank[p[0].id].type=3;
}
for(i=1;i<n;i++)
{
if(p[i-1].bili1!=p[i].bili1)
{
cnt=i+1;
}
if(rank[p[i].id].paiming>cnt)
{
rank[p[i].id].paiming=cnt;
rank[p[i].id].type=3;
}
}
}
void sort4(int n,struct Info p[])
{
int i,j,k;
for(i=0;i<n;i++)
{
k=i;
for(j=i;j<n;j++)
{
if(p[j].bili2>p[k].bili2)
{
k=j;
}
}
struct Info temp=p[i];
p[i]=p[k];
p[k]=temp;
}
int cnt=1;
if(rank[p[0].id].paiming>cnt)
{
rank[p[0].id].paiming=cnt;
rank[p[0].id].type=4;
}
for(i=1;i<n;i++)
{
if(p[i-1].bili2!=p[i].bili2)
{
cnt=i+1;
}
if(rank[p[i].id].paiming>cnt)
{
rank[p[i].id].paiming=cnt;
rank[p[i].id].type=4;
}
}
}
void solve(int n,struct Info p[])
{
int i,m,t,id1,id2;
for(i=0;i<n;i++)
{
printf("%d:%d\n",rank[arr[i]].paiming,rank[arr[i]].type);
}
printf("\n");
}
int main()
{
int N,M;
int i,j;
struct Info p[1010];
while(scanf("%d %d",&N,&M)!=EOF)
{
for(i=0;i<N;i++)
{
scanf("%d %d %d",&t[i].jinpai,&t[i].jiangpai,&t[i].renkou);
t[i].id=i;
t[i].bili1=t[i].jinpai*1.0/t[i].renkou;
t[i].bili2=t[i].jiangpai*1.0/t[i].renkou;
}
for(i=0;i<M;i++)
{
scanf("%d",&arr[i]);
p[i]=t[arr[i]];
rank[arr[i]].paiming=0x3fffffff;
}
sort1(M,p);
sort2(M,p);
sort3(M,p);
sort4(M,p);
solve(M,p);
}
return 0;
}