问题来源
http://ac.jobdu.com/problem.php?pid=1007
问题描述
每个国家根据金牌总数、奖牌总数、金牌人口比例、奖牌人口比例会有四种排序,找到最佳排名。
问题分析
我们用结构体把每个国家的信息存下来,在进行处理。根据四种不同的排序方式计算得出四种排名。
注意:记得最后再把国家按照最大是的顺序排回来(事先用id属性记下序号)。
有关于sort函数使用详解请参考:http://www.cnblogs.com/AlvinZH/p/6784862.html
参考代码
// // Created by AlvinZH on 2017/4/29. // Copyright (c) AlvinZH. All rights reserved. // #include <iostream> #include <vector> #include <cstdio> #include <algorithm> using namespace std; typedef struct Country{ int id; int gold; int sum; int pop; double gp;//金牌人口比例 double sp;//奖牌人口比例 int R[5]; Country(int a,int b,int c) { gold=a;sum=b;pop=c; gp=(double)a/c; sp=(double)b/c; } }Country; vector<Country> ALL; vector<Country> C; bool cmp1(Country a,Country b) { return a.gold>b.gold; } bool cmp2(Country a,Country b) { return a.sum>b.sum; } bool cmp3(Country a,Country b) { return a.gp>b.gp; } bool cmp4(Country a,Country b) { return a.sp>b.sp; } bool cmp5(Country a,Country b) { return a.id<b.id; } int main() { int n,m; while(~scanf("%d %d",&n,&m)) { ALL.clear(); C.clear(); int a,b,c; for(int i=0;i<n;i++) { scanf("%d%d%d",&a,&b,&c); ALL.push_back(Country(a,b,c)); } for(int i=0;i<m;i++) { scanf("%d",&a); C.push_back(ALL[a]); C[i].id=i; } sort(C.begin(),C.end(),cmp1); for(int i=0;i<n;i++) { int rank=i; while(rank>0&&C[i].gold==C[rank-1].gold) rank--; C[i].R[1]=rank+1; } sort(C.begin(),C.end(),cmp2); for(int i=0;i<n;i++) { int rank=i; while(rank>0&&C[i].sum==C[rank-1].sum) rank--; C[i].R[2]=rank+1; } sort(C.begin(),C.end(),cmp3); for(int i=0;i<n;i++) { int rank=i; while(rank>0&&C[i].gp==C[rank-1].gp) rank--; C[i].R[3]=rank+1; } sort(C.begin(),C.end(),cmp4); for(int i=0;i<n;i++) { int rank=i; while(rank>0&&C[i].sp==C[rank-1].sp) rank--; C[i].R[4]=rank+1; } sort(C.begin(),C.end(),cmp5); for(int k=0;k<m;k++) { int choice=1; int rank=C[k].R[1]; for(int i=1;i<=4;i++) { if(C[k].R[i]<rank) { choice=i; rank=C[k].R[i]; } } printf("%d:%d ",rank,choice); } printf(" "); } }
作者: AlvinZH
出处: http://www.cnblogs.com/AlvinZH/
本人Github:https://github.com/Pacsiy/JobDu
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.