1. 本题用java极容易超时,提交了好几次才成功
  2. 另外90 88 77 77 50,名次应该是1 2 3 3 5 ,不是1 2 3 3 4
  1. import java.io.*;
  2.  
  3. public class Main {
  4. @SuppressWarnings("unchecked")
  5. public static void main(String[] args) throws IOException {
  6. StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in));
  7. int n, m;
  8. st.nextToken();
  9. n = (int) st.nval;
  10. st.nextToken();
  11. m = (int) st.nval;
  12. int[] id = new int[n];
  13. int[][] score = new int[n][4];
  14. int[][] pl = new int[4][101];
  15. for (int i = 0; i < n; i++) {
  16. st.nextToken();
  17. id[i] = (int) st.nval;
  18. int avg = 0;
  19. for (int j = 0; j < 3; j++) {
  20. st.nextToken();
  21. score[i][j] = (int) st.nval;
  22. avg += score[i][j];
  23. pl[j][score[i][j]]++;
  24. }
  25. score[i][3] = (int) (Math.round((double) avg / 3));
  26. pl[3][score[i][3]]++;
  27. }
  28. int[][] rank = new int[n][4];
  29. for (int i = 0; i < 4; i++) {
  30. int[] sum = new int[101];
  31. sum[100] = 0;
  32. for (int j = 99; j >= 0; j--) {
  33. sum[j] = sum[j + 1] + pl[i][j + 1];
  34. }
  35.  
  36. for (int j = n - 1; j >= 0; j--) {
  37. rank[j][i] = sum[score[j][i]] + 1;
  38. }
  39.  
  40. }
  41.  
  42. StringBuilder[] rankmap = new StringBuilder[1_000_000];
  43. for (int i = 0; i < n; i++) {
  44. int min = n + 1;
  45. for (int j = 0; j < 4; j++) {
  46. if (min > rank[i][j]) {
  47. min = rank[i][j];
  48. }
  49. }
  50.  
  51. StringBuilder sb = new StringBuilder();
  52. sb.append(min).append(" ");
  53. if (rank[i][3] == min) {
  54. sb.append("A");
  55. rankmap[id[i]] = sb;
  56. } else if (rank[i][0] == min) {
  57. sb.append("C");
  58. rankmap[id[i]] = sb;
  59. } else if (rank[i][1] == min) {
  60. sb.append("M");
  61. rankmap[id[i]] = sb;
  62. } else if (rank[i][2] == min) {
  63. sb.append("E");
  64. rankmap[id[i]] = sb;
  65. }
  66. }
  67.  
  68. PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
  69. StringBuilder sb = new StringBuilder();
  70. for (int i = 0; i < m; i++) {
  71. st.nextToken();
  72. int searchedid = (int) st.nval;
  73. if (rankmap[searchedid] == null) {
  74. sb.append("N/A");
  75. } else {
  76. sb.append(rankmap[searchedid]);
  77. }
  78. sb.append("\n");
  79. }
  80. pw.print(sb);
  81. pw.flush();
  82. }
  83. }

简单优化下:

  1. import java.io.*;
  2.  
  3. public class Main {
  4. static char[] arr = new char[]{'C', 'M', 'E', 'A'};
  5. @SuppressWarnings("unchecked")
  6. public static void main(String[] args) throws IOException {
  7. StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in));
  8. int n, m;
  9. st.nextToken();
  10. n = (int) st.nval;
  11. st.nextToken();
  12. m = (int) st.nval;
  13. int[] id = new int[n];
  14. int[][] score = new int[n][4];
  15. int[][] pl = new int[4][101];
  16. for (int i = 0; i < n; i++) {
  17. st.nextToken();
  18. id[i] = (int) st.nval;
  19. int avg = 0;
  20. for (int j = 0; j < 3; j++) {
  21. st.nextToken();
  22. score[i][j] = (int) st.nval;
  23. avg += score[i][j];
  24. pl[j][score[i][j]]++;
  25. }
  26. score[i][3] = (int) (Math.round((double) avg / 3));
  27. pl[3][score[i][3]]++;
  28. }
  29. int[][] rank = new int[n][4];
  30. for (int i = 0; i < 4; i++) {
  31. int[] sum = new int[101];
  32. sum[100] = 0;
  33. for (int j = 99; j >= 0; j--) {
  34. sum[j] = sum[j + 1] + pl[i][j + 1];
  35. }
  36.  
  37. for (int j = n - 1; j >= 0; j--) {
  38. rank[j][i] = sum[score[j][i]] + 1;
  39. }
  40.  
  41. }
  42.  
  43. StringBuilder[] rankmap = new StringBuilder[1_000_000];
  44.  
  45. for (int i = 0; i < n; i++) {
  46. int min = n + 1;
  47. int index = 0;
  48. for (int j = 0; j < 4; j++) {
  49. if (min > rank[i][j] || (j == 3 && min == rank[i][j])) {
  50. min = rank[i][j];
  51. index = j;
  52. }
  53. }
  54.  
  55. StringBuilder sb = new StringBuilder();
  56. sb.append(min).append(" ").append(arr[index]);
  57. rankmap[id[i]] = sb;
  58. }
  59.  
  60. PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
  61. StringBuilder sb = new StringBuilder();
  62. for (int i = 0; i < m; i++) {
  63. st.nextToken();
  64. int searchedid = (int) st.nval;
  65. if (rankmap[searchedid] == null) {
  66. sb.append("N/A");
  67. } else {
  68. sb.append(rankmap[searchedid]);
  69. }
  70. sb.append("\n");
  71. }
  72. pw.print(sb);
  73. pw.flush();
  74. }
  75. }

  

PAT 甲级【1012 The Best Rank】的更多相关文章

  1. PAT甲级1012. The Best Rank

    PAT甲级1012. The Best Rank 题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同 ...

  2. PAT 甲级 1012 The Best Rank

    https://pintia.cn/problem-sets/994805342720868352/problems/994805502658068480 To evaluate the perfor ...

  3. PAT 甲级 1012 The Best Rank (25 分)(结构体排序)

    题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同时,我们鼓励学生强调自己的最优秀队伍 - 也就是说 ...

  4. PAT甲级——1012 The Best Rank

    PATA1012 The Best Rank To evaluate the performance of our first year CS majored students, we conside ...

  5. PAT——甲级1012:The Best Rank(有坑)

    1012 The Best Rank (25 point(s)) To evaluate the performance of our first year CS majored students, ...

  6. PAT甲 1012. The Best Rank (25) 2016-09-09 23:09 28人阅读 评论(0) 收藏

    1012. The Best Rank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To eval ...

  7. pat甲级1012

    1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ...

  8. 【PAT】1012. The Best Rank (25)

    题目链接: http://pat.zju.edu.cn/contests/pat-a-practise/1012 题目描述: To evaluate the performance of our fi ...

  9. PAT甲级——A1012 The Best Rank

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  10. PAT甲级1012题解——选择一种合适数据存储方式能使题目变得更简单

    题目分析: 本题的算法并不复杂,主要是要搞清楚数据的存储方式(选择一种合适的方式存储每个学生的四个成绩很重要)这里由于N的范围为10^6,故选择结构体来存放对应下标为学生的id(N只有2000的范围, ...

随机推荐

  1. 9.文件和异常--《Python编程:从入门到实践》

    9.1 从文件中读取数据   要使用文本文件中的信息,首先需要将信息读取到内存中.为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取. 9.1.1 读取整个文件 with open( ...

  2. .NET Core开发实战(第2课:内容综述)--学习笔记

    02 | 内容综述 课程目标 掌握 .NET Core 微服务架构的最佳实践 成长为一个具备良好架构设计能力的架构师 课程内容 第一部分 .NET Core 的必备知识 第二部分 .NET Core ...

  3. 顺着这份Java面试地图,国内一二线互联网公司随便进...

    原创:陶朱公Boy(微信公众号ID:taozhugongboy),欢迎分享,转载请保留出处. 前言 临近春节,这几天手头没什么事情,花了点时间,将自己近两年收集的面试真题,进行了一番深度归纳总结,整理 ...

  4. 鹏程杯子2023 pwn

    主要就是修改stdin的最后几位,使他变为write,然后泄露libc,为所欲为即可. 本人是卡在不知道stdin那里可以修改. 然后使用一下jmp qword rbp这个gadget 0x400a9 ...

  5. JS 这一次彻底理解插入排序

    壹 ❀ 引 在前两篇排序文章中,我们分别介绍了冒泡排序与选择排序,趁热打铁,我们接着聊插入排序.老实说,在分析排序过程中头脑很清楚,过后再尝试写出排序代码还有点坎坷...可能是我脑瓜子不太机灵的问题, ...

  6. CF1850H The Third Letter

    题目链接 题解 知识点:贪心,图论建模. 考虑对约束 a b d 建边 \(a \mathop{\to}\limits^d b\) 与 \(b \mathop{\to}\limits^{-d} a\) ...

  7. 【Unity3D】基于深度和法线纹理的边缘检测方法

    1 前言 ​ 边缘检测特效中使用屏后处理技术,通过卷积运算计算梯度,检测每个像素周围像素的亮度差异,以识别是否是边缘像素:选中物体描边特效中也使用了屏后处理技术,通过 CommandBuffer 获取 ...

  8. eclipse项目右击找不到build path

    右击项目–>properties–>Project Facets–>勾选右侧的Java,然后保存. 此时再操作就有了.

  9. Vue+SpringBoot+ElementUI实战学生管理系统-5.用户管理模块

    1.章节介绍 前一篇介绍了项目的API接口设计,这一篇编写用户管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.项目截图 列表操作 动态图 4 ...

  10. spring boot+bootstrap实现动态轮播图实战

    1.bootstrap轮播图 最近开发了个网站需要用到轮播图,正好前端用的是Bootstrap,这里就实战一下. 水平一般能力有限,仅供参考. 前提条件: bootstrap4.5 jquery 3张 ...