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的范围, ...
随机推荐
- 2023年多校联训NOIP层测试3+「SFCOI-3」Sadness Fan Club Round 3
2023年多校联训NOIP层测试3 T1 数列变换 \(10pts\) 考虑暴力,发现 \(f\) 数列进行一次变换 \(A\) ,再进行一次变换 \(B\) 后,恢复成了原数列: \(f\) 数列进 ...
- JS Leetcode 263. 丑数 题解分析,来认识有趣的丑数吧
壹 ❀ 引 本题来自LeetCode263. 丑数,难度简单,题目描述如下: 给你一个整数 n ,请你判断 n 是否为 丑数 .如果是,返回 true :否则,返回 false . 丑数 就是只包含质 ...
- Educational Codeforces Round 136 (Rated for Div. 2) A-E
比赛链接 A 题解 知识点:模拟. 所有点都跑一遍即可. 另外可以不模拟, \(\geq 2*2\) 的情况都可以摆在 \((2,2)\) 这个点,其他摆在 \((1,1)\) . 时间复杂度 \(O ...
- NC23501 小A的回文串
题目链接 题目 题目描述 小A非常喜欢回文串,当然我们都知道回文串这种情况是非常特殊的.所以小A只想知道给定的一个字符串的最大回文子串是多少,但是小A对这个结果并不是非常满意.现在小A可以对这个字符串 ...
- STM32F401+nRF24L01无线传输音频(对讲机原型)
尝试结合STM32F401的ADC, PWM, SPI(NRF24L01)和TIM, 试验了一下音频的无线传输(对讲机原型) 工作机制 音频采样 因为硬件的限制, 包括STM32F401片内存储, 内 ...
- 使用多层RNN-LSTM网络实现MNIST数据集分类及常见坑汇总
1 前言 循环神经网络(Recurrent Neural Network, RNN)又称递归神经网络,出现于20世纪80年代,其雏形见于美国物理学家J.J.Hopfield于1982年提出的可作联想存 ...
- Vue中$refs的理解
Vue中$refs的理解 $refs是一个对象,持有注册过ref attribute的所有DOM元素和组件实例. 描述 ref被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象 ...
- Java集合框架学习(十五) ListIterator接口详解
ListIterator介绍 一个为list对象设计的迭代器,允许开发人员在2个方向上迭代,修改和获得list迭代位置. ListIterator 没有所谓当前元素. 它的游标位置总是位于previo ...
- 麒麟系统开发笔记(五):制作安装麒麟系统的启动U盘、物理机安装麒麟系统以及搭建Qt开发环境
前言 电脑从U盘装麒麟系统,搭建实机Qt开发运行环境. 制作麒麟系统U盘(使用LiveUSB) 步骤一:先准备个至少8GB的U盘 之前购买的一批联想U盘,如下图: 查看U盘: 步 ...
- pgrep查询当前运行程序的pid
pgrep 运行的程序 [root@c1 ~]# pgrep matmul 2634730