hdu 3789 hdoj 3789

来源:互联网 发布:有哪些污的游戏知乎 编辑:程序博客网 时间:2024/06/05 07:48

奥运排序问题

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个国家号。
 

Output
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例
对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。
 

Sample Input
4 44 8 16 6 24 8 22 12 40 1 2 34 28 10 18 11 28 12 38 13 40 3
 

Sample Output
1:31:12:11:21:11:1
 
#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;
}
原创粉丝点击