本文共 1382 字,大约阅读时间需要 4 分钟。
奥运排序问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 661 Accepted Submission(s): 158 有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例
对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。
4 44 8 16 6 24 8 22 12 40 1 2 34 28 10 18 11 28 12 38 13 40 3
#include<stdio.h>
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;
}
转载地址:http://txtpi.baihongyu.com/