看网上这道题用java写的几乎没有,就分享一下自己的写法

输入格式:

输入的第一行给出两个正整数N和M(≤224,因为世界上共有224个国家和地区),分别是参与排名的国家和地区的总个数、以及前来咨询的国家的个数。为简单起见,我们把国家从0 ~ N−1编号。之后有N行输入,第i行给出编号为i−1的国家的金牌数、奖牌数、国民人口数(单位为百万),数字均为[0,1000]区间内的整数,用空格分隔。最后面一行给出M个前来咨询的国家的编号,用空格分隔。

输出格式:

在一行里顺序输出前来咨询的国家的排名:计算方式编号。其排名按照对该国家最有利的方式计算;计算方式编号为:金牌榜=1,奖牌榜=2,国民人均金牌榜=3,国民人均奖牌榜=4。输出间以空格分隔,输出结尾不能有多余空格。若某国在不同排名方式下有相同名次,则输出编号最小的计算方式。

思路:这道题我就是直接调用JAVA容器的API实现,注意一个很细节的点就是,如果两个国家计算排名的数值参数是相等的那么它的排名是并列的,举个例子:1(5个金牌)2(5个金牌)3(3个金牌)三个人如果按金牌数量来排名的话,则1,2都是第一名,3是第三名。这个点很容易忽略。

AC代码如下:

import java.util.*;
public class ptaOlympicGames {public static LinkedHashMap<Integer,Person>hm=new LinkedHashMap<>();//key是国家的编号,value是构造的Person类public static ArrayList<Map.Entry<Integer,Person>>s1=new ArrayList<>();//完成最后的操作public static void main(String[] args) {Scanner sc=new Scanner(System.in);ArrayList<Integer>a=new ArrayList<>();//用来存储要来咨询的国家编号int n=sc.nextInt();int m=sc.nextInt();for(int i=0;i<n;i++){hm.put(i, new Person(sc.nextInt(),sc.nextInt(),sc.nextInt()));}for(int i=0;i<m;i++){a.add(sc.nextInt());}for(Map.Entry x:hm.entrySet()){s1.add(x);}sort1();//对应四种排法sort2();sort3();sort4();for(int i=0;i<s1.size();i++){s1.get(i).getValue().getTemp();//对他们的temp,temp2赋值}for(int j=0;j<a.size();j++){int i=a.get(j);if(j!=a.size()-1)System.out.print(s1.get(i).getValue().temp+":"+s1.get(i).getValue().temp2+" ");elseSystem.out.print(s1.get(i).getValue().temp+":"+s1.get(i).getValue().temp2);}}public static void sort1(){ArrayList<Map.Entry<Integer,Person>>s=new ArrayList<>();for(Map.Entry x:hm.entrySet()){s.add(x);}Collections.sort(s,(a,b)->b.getValue().a1-a.getValue().a1);double same=s.get(0).getValue().a1;s.get(0).getValue().f[0]=0;int te=0;for(int i=1;i<s.size();i++){if(s.get(i).getValue().a1==same) {s.get(i).getValue().f[0] = te;}else{s.get(i).getValue().f[0]=i;same=s.get(i).getValue().a1;te=i;}}}public static void sort2(){ArrayList<Map.Entry<Integer,Person>>s=new ArrayList<>();for(Map.Entry x:hm.entrySet()){s.add(x);}Collections.sort(s,(a,b)->b.getValue().a2-a.getValue().a2);double same=s.get(0).getValue().a2;s.get(0).getValue().f[1]=0;int te=0;for(int i=1;i<s.size();i++){if(s.get(i).getValue().a2==same) {s.get(i).getValue().f[1] = te;}else{s.get(i).getValue().f[1]=i;same=s.get(i).getValue().a2;te=i;}}}public static void sort3(){ArrayList<Map.Entry<Integer,Person>>s=new ArrayList<>();for(Map.Entry x:hm.entrySet()){s.add(x);}Collections.sort(s,(a,b)->{if(b.getValue().a3-a.getValue().a3>0)return 1;else if(b.getValue().a3-a.getValue().a3==0)return 0;elsereturn -1;});double same=s.get(0).getValue().a3;s.get(0).getValue().f[2]=0;int te=0;for(int i=1;i<s.size();i++){if(s.get(i).getValue().a3==same) {s.get(i).getValue().f[2] = te;}else{s.get(i).getValue().f[2]=i;same=s.get(i).getValue().a3;te=i;}}}public static void sort4(){ArrayList<Map.Entry<Integer,Person>>s=new ArrayList<>();for(Map.Entry x:hm.entrySet()){s.add(x);}Collections.sort(s,(a,b)->{if(b.getValue().a4-a.getValue().a4>0)return 1;else if(b.getValue().a4-a.getValue().a4==0)return 0;elsereturn -1;});double same=s.get(0).getValue().a4;s.get(0).getValue().f[3]=0;int te=0;for(int i=1;i<s.size();i++){if(s.get(i).getValue().a4==same) {s.get(i).getValue().f[3] = te;}else{s.get(i).getValue().f[3]=i;same=s.get(i).getValue().a4;te=i;}}}
}
class Person{//定义一个国家类int a1,a2;//分别对应四种排法double a3,a4;int []f=new int[4];int temp;//最大排名int temp2;//对应的排名方式Person(int a,int b,int c){a1=a;a2=b;a3=a/(double)c;a4=b/(double)c;}public void getTemp(){//用于获得temp,temp2int min=100000;int t=0;for(int i=0;i<f.length;i++){if(f[i]<min){min=f[i];t=i;}}temp=min+1;temp2=t+1;}
}

输入样例:

4 4
51 100 1000
36 110 300
6 14 32
5 18 40
0 1 2 3

输出样例:

1:1 1:2 1:3 1:4

PTA 奥运排行榜(java)相关推荐

  1. PTA 数据结构与算法分析 7-40 奥运排行榜 (25 分)

    7-40 奥运排行榜 (25 分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美 ...

  2. 7-20(排序) 奥运排行榜(25 分)

    7-20(排序)奥运排行榜 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美国的奖牌 ...

  3. PTA(接口)用java写 7-10 房屋、住宅、写字楼类

    PTA(接口)用java写 7-10 房屋.住宅.写字楼类 编写一个Java程序,能够处理房屋.住宅.写字楼的信息. 分析楼房.住宅.写字楼之间的关系,分别定义类.其中,楼房是基类,用于描述一座楼房的 ...

  4. 5-40 奥运排行榜 (25分)

    5-40 奥运排行榜 (25分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美国 ...

  5. 奥运排行榜详解 (25分

    7-2 奥运排行榜 (25分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美国的 ...

  6. 7-40 奥运排行榜 (25 分)

    7-40 奥运排行榜 (25 分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美 ...

  7. java 奥运五环_[求助]求奥运五环 java代码

    [求助]求奥运五环 java代码 求奥运五环 java小程序代码,急用!新手先谢过了! 搜索更多相关的解决方案: 奥运五环  java  代码 ----------------解决方案-------- ...

  8. PTA 超市贴花 Java代码

    PTA 超市贴花 Java代码 题目详情 某家超市有一种促销手段,购买金额超过一定阈值就随机给一个贴花.贴花有不同种类的,种类以编号表示,编号是一个1到100之间的数字.当收集到连续编号的三张贴花时, ...

  9. PTA(接口)用java写 7-8 USB接口的定义

    PTA(接口)用java写 7-8 USB接口的定义 定义一个USB接口,并通过Mouse和U盘类实现它,具体要求是: 1.接口名字为USB,里面包括两个抽象方法: void work():描述可以工 ...

最新文章

  1. 图像通道、Scalar、分离、合成通道
  2. 中setting怎么配置_用VSCode配置Latex
  3. hibernate tools for eclipse plugins在线怎么安装
  4. php面向对象(OOP)---- 验证码类
  5. 解决packet tracer不能复制CLI内容的问题
  6. 【Scratch】青少年蓝桥杯_每日一题_2.17_城堡
  7. 马化腾内部分享:三个问题说透如何做产品
  8. cnil在python_在Python中匹配组
  9. 前端学习(595):使用network进行详细分析
  10. 中国互联网安全大会将召开 网络安全再获关注
  11. python魔法方法和普通方法_Python魔法方法之属性访问详解!
  12. word2vec -- 负采样 -- skip-gram
  13. python 日期操作【转】
  14. js创建对象的多种方式及优缺点
  15. ios9提取安装包ipa_iOS 应用降级与 IPA 安装包备份
  16. 在校大学生如何申请免费教育版 Intellij IDEA
  17. python单位根检验看结果_时间序列的ADF检验(单位根检验)
  18. Java 导出时序折线图到Excel
  19. 华为 - 路由交换基础
  20. 线性渐变与径向渐变与重复渐变

热门文章

  1. guacamole 源码_guacamole实现RDP的下载
  2. 关于软件需求开发和项目的范围管理
  3. 【二十四】Python全栈之路--装饰器
  4. Android对接第三方登陆+支付(google+facebook)
  5. Redis 分布式锁2
  6. 必备的视频创作软件:ae 2021 mac中文版 v18.2.1直装版
  7. 去除搜狗输入法弹窗骚扰的一个简易方法
  8. 红外线便携式人体测温仪方案产品说明
  9. 数据分析发展前景怎么样?哪些行业需要数据分析
  10. 单点登录cas综述之cas4.2.7服务端+cas客户端+示例程序+环境搭建说明-陈杰