题目描述

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

输入描述:

有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。

输出描述:

排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例
对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。
链接:https://www.nowcoder.com/questionTerminal/100a4376cafc439b86f5f8791fb461f3
来源:牛客网#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;
// define the info struct
struct country{country(int i=0, int gn=0, int mn=0, float gr=0, float mr=0):id(i),goldNum(gn),medalNum(mn),gratio(gr),mratio(mr){}
public:int id;int goldNum;int medalNum;float gratio;float mratio;
};
//define four kinds of compare methods
bool cmp1(const country& A, const country& B){return A.goldNum>B.goldNum;
}
bool cmp2(const country& A, const country& B){return A.medalNum>B.medalNum;
}
bool cmp3(const country& A, const country& B){return A.gratio>B.gratio;
}
bool cmp4(const country& A, const country& B){return A.mratio>B.mratio;
}
//v is the vector returned, v[i] represent the rank of i country
void mrank(vector<country> cs, int cmpNum, vector<int> & res){switch(cmpNum){case 1:sort(cs.begin(),cs.end(),cmp1);res[cs[0].id]=1;for(int i=1; i<cs.size(); i++){if(cs[i].goldNum==cs[i-1].goldNum)res[cs[i].id]=res[cs[i-1].id];elseres[cs[i].id]=i+1;}break;case 2:sort(cs.begin(),cs.end(),cmp2);res[cs[0].id]=1;for(int i=1; i<cs.size(); i++){if(cs[i].medalNum==cs[i-1].medalNum)res[cs[i].id]=res[cs[i-1].id];elseres[cs[i].id]=i+1;}break;case 3:sort(cs.begin(),cs.end(),cmp3);res[cs[0].id]=1;for(int i=1; i<cs.size(); i++){if(cs[i].gratio==cs[i-1].gratio)res[cs[i].id]=res[cs[i-1].id];elseres[cs[i].id]=i+1;}break;case 4:sort(cs.begin(),cs.end(),cmp4);res[cs[0].id]=1;for(int i=1; i<cs.size(); i++){if(cs[i].mratio==cs[i-1].mratio)res[cs[i].id]=res[cs[i-1].id];elseres[cs[i].id]=i+1;}break;default: break;}
}
int main(void){int cn,sn;while(scanf("%d %d",&cn,&sn)!=EOF){vector<country> cs(cn);int gn, mn, pn;for(int i=0; i<cn; i++){scanf("%d %d %d",&gn,&mn,&pn);cs[i].id=i;cs[i].goldNum=gn;cs[i].medalNum=mn;cs[i].gratio=(float)gn/pn;cs[i].mratio=(float)mn/pn;if(gn==0 && pn==0)cs[i].gratio=0;if(mn==0 && pn==0)cs[i].mratio=0;}vector<vector<int>> ranks(4, vector<int>(cn));for(int i=0; i<4; i++){mrank(cs,i+1,ranks[i]);}vector<int> ids(sn);vector<int> item(sn);vector<int> frank(sn);for(int i=0; i<sn; i++)scanf("%d",&ids[i]);int sni=0;for(int i=0; i<cs.size(); i++){if(i==ids[sni]){int minrank=0x7fffffff;int minitem=0x7fffffff;for(int j=0; j<4; j++){if(minrank>ranks[j][i]){minrank=ranks[j][i];minitem=j+1;}}item[sni]=minitem;frank[sni]=minrank;sni++;if(sni == ids.size())break;}}for(int i=0; i<ids.size(); i++){printf("%d:%d\n",frank[i],item[i]);}printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/JAYPARK/p/10362797.html

牛客网——奥运排序问题相关推荐

  1. 牛客网SQL刷题问题汇总

    目录 1.选取字段为[奇数或偶数问题] 2.[排序问题] 3.MySQL[新建表.修改表] 4.对于表批量[插入数据],如果数据已经存在,则忽略 5.新建一个表,表中字段内容从另一个表导入 6.[索引 ...

  2. 牛客网-数量关系练习

    牛客网-练习 1.16 ,17 ,36 ,111 ,448 ,( ) 正确答案: C 你的答案: C (正确) 639 758 2245 3465 解: 161+1=17 172+2=36 363+3 ...

  3. [C++] 牛客网:合并两个有序的数组

    主要是体验一下牛客网里的核心代码模式到底是怎么弄的..还有C++这个东西平常用的太少了,试一试. 以外的还体验到了sort()函数的使用. 来源:牛客网 题目链接:合并两个有序的数组 知识点:数组.双 ...

  4. 字节跳动java笔试题目_牛客网--字节跳动面试题--特征提取

    牛客网--字节跳动面试题--特征提取 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 来源 链接:特征提取 来源:牛客网 题目 ...

  5. 牛客网:为什么不能将实数作为 HashMap 的 key?

    欢迎关注方志朋的博客,回复"666"获面试宝典 1.起因 让我关注到这一点的起因是一道题:牛客网上的max-points-on-a-line 题目是这么描述的: Given n p ...

  6. 牛客网在线编程----算法入门篇

    标题本篇博文主要是记录下自己的在线编程情况,初次练习,有的算法还待改进,大家有需要可以去牛客网上面多练练! 有需戳–>牛客网在线编程 NC65.题目描述 大家都知道斐波那契数列,现在要求输入一个 ...

  7. 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库

    牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...

  8. 牛客网 Wannafly挑战赛8 A.小Y和小B睡觉觉

    写了一会不想写了... A-小Y和小B睡觉觉 链接:https://www.nowcoder.com/acm/contest/57/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制 ...

  9. 牛客网 2018年全国多校算法寒假训练营练习比赛(第三场)D.小牛vs小客-博弈

    菜哭... D.小牛vs小客 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 链接:https://ww ...

最新文章

  1. -bash: fg: no job control -bash: /usr/java/jdk1.8.0_221-amd64/jre/bin: Is a directory
  2. 在SAP C4C TI(Thing Inspector)页面里添加自定义UI
  3. python 列表加入_加入python中的列表列表
  4. leetcode面试题 10.05. 稀疏数组搜索(二分法)
  5. Flutter 之 StatefulWidget和StatelessWidget
  6. plsql突然无法连接数据库,原来是tnsnames.ora文件出了问题
  7. CentOS 6.8 Bonding技术实现和网卡功能配置基础
  8. Android开发简易计算器
  9. angularjs源码笔记(1.3)--directive ctrl attrs
  10. 手机+文件共享服务器软件,windows文件共享服务器软件
  11. MindSpore实现手写数字识别
  12. fiddler抓取https,提示“CA 根证书不在受信任的存储区域”的解决方法
  13. 输入姓名并分别输出姓和名
  14. 运行JS脚本的几种方式
  15. Golang蓝湖一面
  16. 基于JAVA在线考试系统设计与实现 开题报告
  17. android动态获取悬浮窗,Android 悬浮窗实现
  18. Token一般存放在哪里
  19. 第15节--神经网络应用--异或判断、手写数字识别
  20. (三)pjsip 监听

热门文章

  1. linux xchgl 汇编含义,替换x86 xchgl 汇编指令
  2. 收藏 | 人脸检测之Retinaface
  3. 一文带你纵览 200+ 大规模机器学习研究
  4. C++中 * *的用法与区别----实操才能看明白
  5. 更新版 | GPU CUDA 进阶课程
  6. 用vector实现二维向量
  7. linux系统安装升级win10双系统,Win10 安装Linux ubuntu-18.04双系统(安装指南)
  8. IDEA调试技巧之条件断点
  9. Linux 后台执行脚本或命令 nohup
  10. matlab 调整灰度,matlab灰度图像调整及imadjust函数的用法详解