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的范围, ...
随机推荐
- Java并发(八)----使用线程避免cpu占用100%
1.sleep 实现 在没有利用 cpu 来计算时,不要让 while(true) 空转浪费 cpu,这时可以使用 yield 或 sleep 来让出 cpu 的使用权给其他程序 while(true ...
- RabbitMQ初学
RabbitMQ 消息队列在软件中的应用场景 异步处理上(优于原先的方式) 为什么优于呢? 首先,通常情况下,如上图我们其实不用消息队列的情况下,其实也可以不用100ms,不用allof即可 那么优势 ...
- Kafka-启动时报错: ERROR Fatal error during KafkaServer startup. Prepare to shutdown
一.问题描述 在启动kafka时报错: ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server. ...
- NC20812 绿魔法师
题目链接 题目 题目描述 "我不知道你在说什么,因为我只是个pupil."--绿魔法师 一个空的可重集合S. n次操作,每次操作给出x,k,p,执行以下操作: 1.在S中加入x. ...
- Linux Vim操作看这篇文章就够了
一.什么是Vim Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和Emac ...
- [技术选型与调研] 流程引擎/工作流引擎:Activiti、Flowable、Camunda
1 概述:流程与流程引擎 低代码平台.办公自动化(OA).BPM平台.工作流系统均需要流程引擎功能 [工作流引擎的三大功能] 1)验证当前过程状态:在给定当前状态的情况下,检查是否有效执行任务. 2) ...
- 简单了解HTTP、Websocket和Netty
前言 伴随着网络的快速发展,网络通讯越来越重要,通讯的快捷.安全.方便影响着用户的体验.本文将探讨这些技术的原理.特点以及在实际应用中的应用场景. 1.HTTTP(超文本传输协议) HTTP是一种传输 ...
- 【Android 逆向】【ARM汇编】 函数的栈帧
1. 函数的调用约定 ARM32 参数1-4 放入r0-r3 剩下的入栈,函数返回值放入r0 ARM64 参数1-8 放入X0-X7 剩下的入栈,函数返回值放入X0 (浮点数是放入 Dn 或 Sn) ...
- python中动态生成类type的用法
示例:正常创建类 class Person(object): def __init__(self): self.name = name self.age = age p = Person(" ...
- cw attack