PAT 甲级【1012 The Best Rank】
- 本题用java极容易超时,提交了好几次才成功
- 另外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】的更多相关文章
- PAT甲级1012. The Best Rank
PAT甲级1012. The Best Rank 题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同 ...
- PAT 甲级 1012 The Best Rank
https://pintia.cn/problem-sets/994805342720868352/problems/994805502658068480 To evaluate the perfor ...
- PAT 甲级 1012 The Best Rank (25 分)(结构体排序)
题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同时,我们鼓励学生强调自己的最优秀队伍 - 也就是说 ...
- PAT甲级——1012 The Best Rank
PATA1012 The Best Rank To evaluate the performance of our first year CS majored students, we conside ...
- PAT——甲级1012:The Best Rank(有坑)
1012 The Best Rank (25 point(s)) To evaluate the performance of our first year CS majored students, ...
- 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 ...
- pat甲级1012
1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ...
- 【PAT】1012. The Best Rank (25)
题目链接: http://pat.zju.edu.cn/contests/pat-a-practise/1012 题目描述: To evaluate the performance of our fi ...
- PAT甲级——A1012 The Best Rank
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- PAT甲级1012题解——选择一种合适数据存储方式能使题目变得更简单
题目分析: 本题的算法并不复杂,主要是要搞清楚数据的存储方式(选择一种合适的方式存储每个学生的四个成绩很重要)这里由于N的范围为10^6,故选择结构体来存放对应下标为学生的id(N只有2000的范围, ...
随机推荐
- 6.用户输入和 while 循环--《Python编程:从入门到实践》
6.1 input 函数 函数input()接受一个参数:即要向用户显示的提示或说明.input 将用户输入解释为字符串. name = input("Please enter your n ...
- Burnside引理和Pólya定理
不想写很多冗杂的群论定义,所以本博客不是用来入门的. 如果你想要入门,请点这里. 概要 对于一个作用在集合 \(X\) 上的有限群 \(G\) ,对于每个 \(g\in G\) 令 \(X^g\) 表 ...
- Ubuntu22.04 将EFI启动分区迁移到另一块硬盘
机器上有两块硬盘, 一块已经安装了Win10, 另一块新装Ubuntu22.04, 在新硬盘上划分分区的时候, 有分出256M给 BOOT EFI, 但是安装的时候没注意, 启动分区不知道怎的跑到 W ...
- PLSQL编译存储过程无响应
解决方法如下: 1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CRM_LASTCHGINFO_DAY' AND LO ...
- js与java使用AES加密算法实现前后端加密解密
AES加密算法入门:https://blog.csdn.net/IndexMan/article/details/87284833 第三方crypto.js下载地址:https://download. ...
- 石子合并(区间dp+记忆化搜索)
经典例题:石子合并 题目链接 N 堆石子排成一行,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.计算合并最小得分. 方法一.区间dp ...
- git回退至指定版本,并更新远程仓库
1. git log 查到commit记录 2.复制 commit 后面的id 3. git reset --hard commit 后面的id // 回退 4. 强制更新远程仓库 git ...
- CentOS 8安装RabbitMQ
第一步:安装yum仓库 导入签名KEY: ## primary RabbitMQ signing key ## 这一步如果因为网络问题下载不成功,可以先将签名文件下载下来,本地导入 rpm --imp ...
- 阿里云 SMS 短信 Java SDK 封装
Github & Issues: https://github.com/cn-src/aliyun-sms 官方文档:https://help.aliyun.com/document_deta ...
- Flex 弹性盒子布局
可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么? 1. 弹性盒子布局概念 Flex 是 Flexible Box 的缩写,意为"弹性布 ...