奥运排序问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 661 Accepted Submission(s): 158
Problem Description
按要求,给国家进行排名。
Input
有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。
Output
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例
对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,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
int main(){
int i,j,s[500][3],n,m;
double s1[500],s2[500],s3[500],s4[500];
int num[500],a,b,c,d;
while(scanf("%d%d",&n,&m)!=EOF){
for(i=0;i<n;i++){
s1[i]=-1;
s2[i]=-1;
s3[i]=-1;
s4[i]=-1;
}
for(i=0;i<n;i++){
scanf("%d%d%d",&s[i][0],&s[i][1],&s[i][2]);
}
for(i=0;i<m;i++){
scanf("%d",&num[i]);
s1[num[i]]=s[num[i]][0];
s2[num[i]]=s[num[i]][1];
s3[num[i]]=s[num[i]][0]*1.0/s[num[i]][2];
s4[num[i]]=s[num[i]][1]*1.0/s[num[i]][2];
}
for(i=0;i<m;i++){
a=1,b=1,c=1,d=1;
for(j=0;j<n;j++){
if(s1[num[i]]<s1[j]) a++;
if(s2[num[i]]<s2[j]) b++;
if(s3[num[i]]<s3[j]) c++;
if(s4[num[i]]<s4[j]) d++;
}
if(a<=b&&a<=c&&a<=d) printf("%d:1\n",a);
else if(b<a&&b<=c&&b<=d) printf("%d:2\n",b);
else if(c<a&&c<b&&c<=d) printf("%d:3\n",c);
else if(d<a&&d<b&&d<c) printf("%d:4\n",d);
}
printf("\n");
}
return 0;
}