1. 本题用java极容易超时,提交了好几次才成功
  2. 另外90 88 77 77 50,名次应该是1 2 3 3 5 ,不是1 2 3 3 4
import java.io.*;

public class Main {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException {
StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in));
int n, m;
st.nextToken();
n = (int) st.nval;
st.nextToken();
m = (int) st.nval;
int[] id = new int[n];
int[][] score = new int[n][4];
int[][] pl = new int[4][101];
for (int i = 0; i < n; i++) {
st.nextToken();
id[i] = (int) st.nval;
int avg = 0;
for (int j = 0; j < 3; j++) {
st.nextToken();
score[i][j] = (int) st.nval;
avg += score[i][j];
pl[j][score[i][j]]++;
}
score[i][3] = (int) (Math.round((double) avg / 3));
pl[3][score[i][3]]++;
}
int[][] rank = new int[n][4];
for (int i = 0; i < 4; i++) {
int[] sum = new int[101];
sum[100] = 0;
for (int j = 99; j >= 0; j--) {
sum[j] = sum[j + 1] + pl[i][j + 1];
} for (int j = n - 1; j >= 0; j--) {
rank[j][i] = sum[score[j][i]] + 1;
} } StringBuilder[] rankmap = new StringBuilder[1_000_000];
for (int i = 0; i < n; i++) {
int min = n + 1;
for (int j = 0; j < 4; j++) {
if (min > rank[i][j]) {
min = rank[i][j];
}
} StringBuilder sb = new StringBuilder();
sb.append(min).append(" ");
if (rank[i][3] == min) {
sb.append("A");
rankmap[id[i]] = sb;
} else if (rank[i][0] == min) {
sb.append("C");
rankmap[id[i]] = sb;
} else if (rank[i][1] == min) {
sb.append("M");
rankmap[id[i]] = sb;
} else if (rank[i][2] == min) {
sb.append("E");
rankmap[id[i]] = sb;
}
} PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < m; i++) {
st.nextToken();
int searchedid = (int) st.nval;
if (rankmap[searchedid] == null) {
sb.append("N/A");
} else {
sb.append(rankmap[searchedid]);
}
sb.append("\n");
}
pw.print(sb);
pw.flush();
}
}

简单优化下:

import java.io.*;

public class Main {
static char[] arr = new char[]{'C', 'M', 'E', 'A'};
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException {
StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in));
int n, m;
st.nextToken();
n = (int) st.nval;
st.nextToken();
m = (int) st.nval;
int[] id = new int[n];
int[][] score = new int[n][4];
int[][] pl = new int[4][101];
for (int i = 0; i < n; i++) {
st.nextToken();
id[i] = (int) st.nval;
int avg = 0;
for (int j = 0; j < 3; j++) {
st.nextToken();
score[i][j] = (int) st.nval;
avg += score[i][j];
pl[j][score[i][j]]++;
}
score[i][3] = (int) (Math.round((double) avg / 3));
pl[3][score[i][3]]++;
}
int[][] rank = new int[n][4];
for (int i = 0; i < 4; i++) {
int[] sum = new int[101];
sum[100] = 0;
for (int j = 99; j >= 0; j--) {
sum[j] = sum[j + 1] + pl[i][j + 1];
} for (int j = n - 1; j >= 0; j--) {
rank[j][i] = sum[score[j][i]] + 1;
} } StringBuilder[] rankmap = new StringBuilder[1_000_000]; for (int i = 0; i < n; i++) {
int min = n + 1;
int index = 0;
for (int j = 0; j < 4; j++) {
if (min > rank[i][j] || (j == 3 && min == rank[i][j])) {
min = rank[i][j];
index = j;
}
} StringBuilder sb = new StringBuilder();
sb.append(min).append(" ").append(arr[index]);
rankmap[id[i]] = sb;
} PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < m; i++) {
st.nextToken();
int searchedid = (int) st.nval;
if (rankmap[searchedid] == null) {
sb.append("N/A");
} else {
sb.append(rankmap[searchedid]);
}
sb.append("\n");
}
pw.print(sb);
pw.flush();
}
}

  

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. Delphi中的注释,仅此一篇

    在Pascal中,注释括在大括号中或带星号的圆括号中.Delphi 也认可C++ 风格的注释,即把注释放在双斜线后.例如: {this is a comment} (* this is another ...

  2. linux统计文件大小-以KB、MB、GB、TB为单位

    fileSize=`hadoop fs -ls /data/internetLog/home/DPI/idc/20180806/*201808062[0-2]* | awk 'BEGIN{ sum=0 ...

  3. [Java][Spring]spring profile与maven profile多环境管理

    spring profile 与 maven profile 多环境管理 spring profile Spring profile是Spring提供的多环境管理方案. 如下图: 每种环境都对应一个y ...

  4. CF739A Alyona and mex 题解

    题目传送门 前置知识 贪心 | 构造 解法 从贪心的角度分析,最小的 \(\operatorname{mex}\) 仅会与长度最小的区间有关:另外为使得 \(\operatorname{mex}\) ...

  5. Centos7使用memtester测试内存

    memtester http://pyropus.ca/software/memtester/ 下载并编译, 不用安装 wget http://pyropus.ca/software/memteste ...

  6. Spring Boot图书管理系统项目实战-6.图书管理

    导航: pre:  5.读者管理 next:7.借阅图书 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.页面设计 2.1 book.html ...

  7. oracle 使用comment语句添加表注释

    使用oracle comment语句可以给表.字段.视图等对象添加备注信息. 大致语法为: comment on TABLE table_name IS '备注内容'; 权限要求: 默认情况下用户只能 ...

  8. error接口

    // 实际上它是interface类型,这个类型有一个返回错误信息的单一方法: type error interface{ Error() string } 创建一个error最简单的方法就是调用er ...

  9. sort.interface接口

    一个内置的排序算法需要知道三个东西:序列的长度,表示两个元素比较的结果,一种交换两个元素的方式:这就是sort.Interface的三个方法: package sort type Interface ...

  10. 如何在C#中解析Excel公式

    前言 在日常工作中,我们经常需要在Excel中使用公式对表中数据进行计算(求和.求差和求均值等)和分析,从而实现对数据的分类,通常情况下,当数据量较少或场景变化单一的情况下,使用公式可以满足用户的要求 ...