7-17 奥运排行榜 (25 分)

Posted sykline

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-17 奥运排行榜 (25 分)相关的知识,希望对你有一定的参考价值。

题目:

技术分享图片技术分享图片?

思路:针对四种排序方法构建四个结构体,按四种排序排完之后,把结果汇总到代表国家的一个结构体中。然后就是查询就是了。排序规则可通过下面的例子了解一下:

序列:g[0] = 1,g[1] = 2,g[2] = 2, g[3] = 3;

排名:1          ,2        ,2          ,3(并不是1,2,3,4)

技术分享图片技术分享图片?

代码: 

技术分享图片
  1 #include <bits/stdc++.h>
  2 #define FRE() freopen("in.txt","r",stdin)
  3 using namespace std;
  4 const int maxn = 500;
  5 typedef unsigned long long ll;
  6 int n,q;
  7 
  8 struct Country
  9 {
 10     int g,s;
 11     int g_p,s_p;
 12 } ct[maxn];
 13 
 14 struct node
 15 {
 16     double gold_p, silver_p;
 17     int g, s;
 18     int id;
 19 } g[maxn],s[maxn],g_p[maxn],s_p[maxn];
 20 
 21 void init()
 22 {
 23     cin>>n>>q;
 24     for(int i = 0; i<n; i++)
 25     {
 26         int num;
 27         cin>>g[i].g>>s[i].s>>num;
 28         g_p[i].gold_p = 1.0*g[i].g/num;
 29         s_p[i].silver_p = 1.0*s[i].s/num;
 30         g[i].id = s[i].id = g_p[i].id = s_p[i].id = i;
 31     }
 32     return;
 33 }
 34 
 35 bool cmdg(node& a, node& b)
 36 {
 37     if(a.g == b.g)
 38         return a.id<b.id;
 39     return a.g > b.g;
 40 }
 41 bool cmds(node& a,node& b)
 42 {
 43     if(a.s==b.s)
 44         return a.id<b.id;
 45     return a.s > b.s;
 46 }
 47 bool cmdg_p(node& a,node& b)
 48 {
 49     return a.gold_p > b.gold_p;
 50 }
 51 bool cmds_p(node& a,node& b)
 52 {
 53     return a.silver_p > b.silver_p;
 54 }
 55 
 56 int main()
 57 {
 58     init();
 59     sort(g,g+n,cmdg);
 60     int lastid = 0;
 61     ct[g[0].id].g = 0;
 62     for(int i = 1; i<n; i++)
 63     {
 64         if(g[i].g==g[i-1].g)
 65             ct[g[i].id].g = lastid;
 66         else
 67         {
 68             ct[g[i].id].g = i;
 69             lastid = i;
 70         }
 71     }
 72     sort(s,s+n,cmds);
 73     lastid = 0;
 74     ct[s[0].s].s = 0;
 75     for(int i = 1; i<n; i++)
 76     {
 77         if(s[i].s==s[i-1].s)
 78             ct[s[i].id].s = lastid;
 79         else
 80         {
 81             ct[s[i].id].s = i;
 82             lastid = i;
 83         }
 84     }
 85     sort(g_p,g_p+n,cmdg_p);
 86     lastid = 0;
 87     ct[g_p[0].id].g_p = 0;
 88     for(int i = 1; i<n; i++)
 89     {
 90         if(g_p[i].gold_p == g_p[i-1].gold_p)
 91             ct[g_p[i].id].g_p = lastid;
 92         else
 93         {
 94             ct[g_p[i].id].g_p = i;
 95             lastid = i;
 96         }
 97     }
 98     sort(s_p,s_p+n,cmds_p);
 99     lastid = 0;
100     ct[s_p[0].id].s_p = 0;
101     for(int i = 1; i<n; i++)
102     {
103         if(s_p[i].silver_p == s_p[i-1].silver_p)
104             ct[s_p[i].id].s_p = lastid;
105         else
106         {
107             ct[s_p[i].id].s_p = i;
108             lastid = i;
109         }
110     }
111     for(int i = 0; i<q; i++)
112     {
113         int tmp,f,ans;
114         cin>>tmp;
115         f = 1,ans = ct[tmp].g;
116         if(ct[tmp].s<ans)
117             f = 2,ans = ct[tmp].s;
118         if(ct[tmp].g_p<ans)
119             f = 3,ans = ct[tmp].g_p;
120         if(ct[tmp].s_p<ans)
121             f = 4,ans = ct[tmp].s_p;
122         if(i)
123             cout<<" ";
124         cout<<ans+1<<":"<<f;
125     }
126     return 0;
127 }
128 /*
129 样例输入:
130 4 4
131 51 100 1000
132 36 110 300
133 6 14 32
134 5 18 40
135 0 1 2 3
136 样例输出:
137 1:1 1:2 1:3 1:4
138 */
View Code

 

以上是关于7-17 奥运排行榜 (25 分)的主要内容,如果未能解决你的问题,请参考以下文章

7-17 Hashing(25 分)

7-17 Hashing(25 分)

pta7-18奥运排行榜(模拟)

7-17 汉诺塔的非递归实现(25 分)(有待改进)

PAT乙级1085-----PAT单位排行 (25分)

PAT乙级1085 PAT单位排行 (25 分)