OJ_1007

来源:互联网 发布:ubuntu忘记登录密码 编辑:程序博客网 时间:2024/05/17 22:01
#include <iostream>#include <stdlib.h>#include <algorithm>using namespace std;typedef struct record{        int gold;        int prize;//        double goldr;//        double prizer;          int num;        int id;        int rank[5];}record;bool compid(const record& a,const record &b){     return a.id<b.id;}bool comp1(const record& a,const record &b){     return a.gold>b.gold; }bool comp2(const record& a,const record &b){     return a.prize>b.prize; } bool comp3(const record& a,const record &b){     return a.gold*b.num>b.gold*a.num; } bool comp4(const record& a,const record &b){     return a.prize*b.num>b.prize*a.num; } void func(){     int n,m;     while(cin>>n>>m)     {                     record re[n];                     for(int i=0;i<n;i++)                     {                             int gold,prize,num;                             cin>>gold>>prize>>num;                             re[i].gold=gold;                             re[i].prize=prize;                       //      re[i].goldr=(double)gold/num;                        //     re[i].prizer=(double)prize/num;                              re[i].num=num;                     }                     record r[m];                     for(int i=0;i<m;i++)                     {                             int t;                             cin>>t;                             r[i]=re[t];                             r[i].id=i;                     }                     int way=1;                     sort(r,r+m,comp1);                     for(int i=0;i<m;i++)                     {                             r[i].rank[way]=i+1;                             if(i!=0)                                    if(r[i].gold==r[i-1].gold)                                    r[i].rank[way]=r[i-1].rank[way];                                                                                           /*                             if(i==0)                                    r[i].rank[way]=1;                            else if(r[i].gold==r[i-1].gold)                                    r[i].rank[way]=r[i-1].rank[way];                            else                                                            r[i].rank[way]=r[i-1].rank[way]+1;                                    */                     }                     way++;                      sort(r,r+m,comp2);                     for(int i=0;i<m;i++)                     {                             r[i].rank[way]=i+1;                             if(i!=0)                                     if(r[i].prize==r[i-1].prize)                                    r[i].rank[way]=r[i-1].rank[way];                     }                     way++;                      sort(r,r+m,comp3);                     for(int i=0;i<m;i++)                     {                             r[i].rank[way]=i+1;                             if(i!=0)                                      if(r[i].gold*r[i-1].num==r[i-1].gold*r[i].num)                                    r[i].rank[way]=r[i-1].rank[way];                                              }                     way++;                      sort(r,r+m,comp4);                     for(int i=0;i<m;i++)                     {                              r[i].rank[way]=i+1;                              if(i!=0)                                      if(r[i].prize*r[i-1].num==r[i-1].prize*r[i].num)                                    r[i].rank[way]=r[i-1].rank[way];                                                }                     sort(r,r+m,compid);                     int min;                     int minway;                     for(int i=0;i<m;i++)                     {                             for(int j=1;j<=4;j++)                             {                                     if(j==1){                                              min=r[i].rank[j];                                              minway=j;                                     }                                     else{                                          if(min>r[i].rank[j]){                                             min=r[i].rank[j];                                             minway=j;                                          }                                     }                             }                             cout<<min<<":"<<minway<<endl;                     }                     cout<<endl;                                                                                     }}int main(int argc, char *argv[]){    //printf("Hello, world\n");func();return 0;}

每种排名方式都算一次

相同排名时,名次数不增加

注意:

相同数目排序名次如何变化;除法的相等比较,利用 通分改为乘法


题目描述:

按要求,给国家进行排名。

输入:
有多组数据。
第一行给出国家数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
样例输出:
1:31:12:11:21:11:1

0 0
原创粉丝点击