zoukankan      html  css  js  c++  java
  • pta7-18奥运排行榜(模拟)

    题目链接:https://pintia.cn/problem-sets/1101307589335527424/problems/1101314114867245056

    题意:给n个国家,以及每个国家的金牌数、奖牌数、人口数(百万)。以及m个来询问的国家,现在有4中排名方式(金牌数,奖牌数、人均金牌数、人均奖牌数),对来询问的每个国家给出对其最有利的排名方式以及排名。

    思路:用4次sort就行,打表存进b数组,对每次询问输出相应的结果即可,注意一个坑点,比如两个国家金牌数相等,则在金牌数排行榜中这两个国家排名相同,在这wa

    了一发。详见代码:(代码看着很长,其实都是重复的部分,可以写进一个循环的,懒得改了)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 struct node{
     5     int gd,md,ps,id;
     6     double p3,p4;
     7 }a[230];
     8 
     9 bool cmp1(node x,node y){
    10     return x.gd>y.gd;
    11 }
    12 
    13 bool cmp2(node x,node y){
    14     return x.md>y.md;
    15 }
    16 
    17 bool cmp3(node x,node y){
    18     return x.p3>y.p3;
    19 }
    20 
    21 bool cmp4(node x,node y){
    22     return x.p4>y.p4;
    23 }
    24 
    25 int n,m,b[230][5];
    26 
    27 int main(){
    28     scanf("%d%d",&n,&m);
    29     for(int i=0;i<n;++i){
    30         scanf("%d%d%d",&a[i].gd,&a[i].md,&a[i].ps);
    31         a[i].id=i;
    32         a[i].p3=a[i].gd*1.0/(a[i].ps*1.0);
    33         a[i].p4=a[i].md*1.0/(a[i].ps*1.0);
    34     }
    35     sort(a,a+n,cmp1);
    36     b[a[0].id][1]=1;
    37     for(int i=1;i<n;++i)
    38         if(a[i].gd==a[i-1].gd)
    39             b[a[i].id][1]=b[a[i-1].id][1];
    40         else
    41             b[a[i].id][1]=i+1;
    42     
    43     sort(a,a+n,cmp2);
    44     b[a[0].id][2]=1;
    45     for(int i=1;i<n;++i)
    46         if(a[i].md==a[i-1].md)
    47             b[a[i].id][2]=b[a[i-1].id][2];
    48         else
    49             b[a[i].id][2]=i+1;
    50 
    51     sort(a,a+n,cmp3);
    52     b[a[0].id][3]=1;
    53     for(int i=1;i<n;++i)
    54         if(a[i].p3==a[i-1].p3)
    55             b[a[i].id][3]=b[a[i-1].id][3];
    56         else
    57             b[a[i].id][3]=i+1;
    58 
    59     sort(a,a+n,cmp4);
    60     b[a[0].id][4]=1;
    61     for(int i=1;i<n;++i)
    62         if(a[i].p4==a[i-1].p4)
    63             b[a[i].id][4]=b[a[i-1].id][4];
    64         else
    65             b[a[i].id][4]=i+1;
    66 
    67     while(m--){
    68         int tmp;
    69         scanf("%d",&tmp);
    70         int t1,t2=250;
    71         for(int i=1;i<=4;++i)
    72             if(t2>b[tmp][i])
    73                 t2=b[tmp][i],t1=i;
    74         printf("%d:%d",t2,t1);
    75         if(m) printf(" ");
    76     }
    77     printf("
    ");
    78     return 0;
    79 }
  • 相关阅读:
    实用工具---制作试卷
    RDP Client 参数含义调查
    xenserver 虚拟机定时开关机实现
    xenserver 脚本学习之/opt/xensource/bin/xapi-autostart-vms
    最佳的前端监听事件触发方式
    前端之Angularjs
    网页分享
    面试题之事务
    Spring Security安全访问控制解决方案的安全框架
    docker部署
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10495348.html
Copyright © 2011-2022 走看看