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 }
原文地址:https://www.cnblogs.com/FrankChen831X/p/10495348.html