PTA L1-8 静静的推荐

PTA L1-8 静静的推荐

分数 20

全屏浏览题目

切换布局

作者 陈越

单位 浙江大学

天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:

  • 只考虑得分不低于 175 分的学生;
  • 一共接受 K 批次的推荐名单;
  • 同一批推荐名单上的学生的成绩原则上应严格递增;
  • 如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。

给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?

输入格式:

输入第一行给出 3 个正整数:N(≤105)为参赛学生人数,K(≤5×103)为企业接受的推荐批次,S(≤100)为该企业的 PAT 面试分数线。

随后 N 行,每行给出两个分数,依次为一位学生的天梯赛分数(最高分 290)和 PAT 分数(最高分 100)。

输出格式:

在一行中输出静静姐最多能向企业推荐的学生人数。

输入样例:

10 2 90
203 0
169 91
175 88
175 0
175 90
189 0
189 0
189 95
189 89
256 100

输出样例:

8

样例解释:

第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。

代码长度限制

16 KB

Java (javac)

时间限制

1300 ms

内存限制

256 MB

Python (python3)

时间限制

400 ms

内存限制

64 MB

其他编译器

时间限制

200 ms

内存限制

64 MB

我的答案:

一、信息

1.天梯赛结束后,企业的人力资源部希望能推荐一些学生。

2.只考虑得分不低于175分的学生

3.一共接收K批次的推荐名单

4.同一批推荐名单上的学生成绩原则应该严格递增

5.如果优点学生天梯赛成绩与前一个人相同,但通过了PTA考试,且成绩达到了企业的面试分数线,则也可以接受。

6.给出全体参赛学生的成绩和它们的PAT考试成绩,请你的PAT考试成绩,请你算一算他能向企业推荐多少学生。

7.输入格式

三个输入,一个是参赛学生人数,二是企业接受推荐批次,S为该企业的PAT面试分数线

8.输出格式

在一行中输出静静姐最多能向企业推荐的人数

二、分析

条件1.告诉我们的此次题目的目的

条件2.其实就是第一个限制条件也是规则说明了只考虑175分及以上的人

条件3.就是告诉我们第二个限制条件,表面上很简单但其实告诉我们一种特殊情况,我们不妨来看看有几种情况:

1.第一种情况 就是每一个人的分数都不一样即没有同分,这种情况很简单因为其实动用第一个限制条件就行了,难道你们不觉得很奇怪吗这种情况因为如果这样就不需要条件3的限制条件了。

2.第二种情况 就是存在有同分的情况

其实这个问题就是他每一批都会先遍历第一列的元素然后再遍历第二列元素相当于:

这里以第一批为例我们第一次会收到175、189、203、256 四个学生不同分然后他开始遍历第二列又查到PTA过90分的两个同学175 和189

从这个样例分析中我就知道了,其实每一批次是通过先检测第一列然后检测第二列在放入这个批次

 三、步骤

第一步 定义一个数据结果用来存结果,问题出现就是首先用什么数据结构来模拟这个批次的队列就是怎么存结果

第二步 k就是批次其实就是循环的次数所以我们可以通过循环k次然后遍历

第三步 进入第k次遍历,然后判断第一列是否天梯赛的分数是否符合175分及以上,满足的话就压入数据结构中,然后判断第二列是否符合限制条件2.满足就压入数据结构中。

第四步 结果输出数据结构的数就行了。

四、出现的问题

问题1.存储结构的数据结构应该选择什么

我一个大神同学推荐我使用map数据结构。

问题2.


正确答案:

一、信息

题目描述:根据一定的规则筛选学生,为企业推荐K批学生。筛选规则为:

  1. 只考虑得分不低于 175 分的学生。
  2. 同一批推荐名单上的学生的成绩原则上应严格递增。
  3. 如果有的学生天梯赛成绩与前一个人相同,但其参加过 PAT 考试,且成绩达到了企业的面试分数线,则也可以接受。

二、分析

  1. 先对满足天梯赛分数>=175并且PAT分数>=S的学生进行计数,并标记这些学生不再参与后续计算。
  2. 对于满足天梯赛分数>=175的学生,使用map记录每一个分数的出现次数,只要这个分数的出现次数不超过K就可以计入结果。

三、算法设计

数组思路:

  1. 初始化一个数组counts用于跟踪每个天梯赛分数的推荐次数。
  2. 遍历每个学生,检查其是否满足上述的推荐条件。
  3. 如果满足条件,增加总推荐数,并更新对应天梯赛分数的推荐次数。

map思路:

  1. 遍历所有学生的分数。
  2. 对于天梯赛分数>=175并且PAT分数>=S的学生,增加答案计数,并标记这些学生不再参与后续计算。
  3. 对于天梯赛分数>=175的学生,检查该分数在map中的出现次数,如果不超过K则增加答案计数。

四、代码实现

数组实现:

C语言:
#include <stdio.h>int main() {int n, k, s, total = 0;int ladderScores[100500] = {0}, patScores[100500] = {0};int counts[291] = {0}; // 天梯赛最高分290// 输入scanf("%d %d %d", &n, &k, &s);for (int i = 0; i < n; i++) {scanf("%d %d", &ladderScores[i], &patScores[i]);}// 处理for (int i = 0; i < n; i++) {if (ladderScores[i] >= 175) {// 如果PAT分数达标if (patScores[i] >= s) {total++;continue;}// 检查这个天梯赛分数是否已经推荐k次if (counts[ladderScores[i]] < k) {total++;counts[ladderScores[i]]++;}}}// 输出结果printf("%d\n", total);return 0;
}

Map实现:

C语言:
#include <stdio.h>// 简单的map数据结构
typedef struct {int keys[100500];int values[100500];int size;
} SimpleMap;// 初始化map
void initMap(SimpleMap *m) {m->size = 0;
}// 向map中插入或更新一个键值对
void put(SimpleMap *m, int key, int value) {for (int i = 0; i < m->size; i++) {if (m->keys[i] == key) {m->values[i] = value;return;}}m->keys[m->size] = key;m->values[m->size] = value;m->size++;
}// 从map中获取一个键对应的值,如果键不存在返回defaultValue
int get(SimpleMap *m, int key, int defaultValue) {for (int i = 0; i < m->size; i++) {if (m->keys[i] == key) {return m->values[i];}}return defaultValue;
}int main() {int n, k, s, total = 0;int ladderScore, patScore;SimpleMap scoreCounts;initMap(&scoreCounts);// 输入scanf("%d %d %d", &n, &k, &s);for (int i = 0; i < n; i++) {scanf("%d %d", &ladderScore, &patScore);if (ladderScore >= 175) {// 如果PAT分数达标if (patScore >= s) {total++;continue;}// 检查这个天梯赛分数是否已经推荐k次int count = get(&scoreCounts, ladderScore, 0);if (count < k) {total++;put(&scoreCounts, ladderScore, count + 1);}}}// 输出结果printf("%d\n", total);return 0;
}
C++:
#include <iostream>
#include <unordered_map>
using namespace std;int main() {int n, k, s, total = 0;int ladderScore, patScore;unordered_map<int, int> scoreCounts; // 使用C++ STL中的unordered_map作为map// 输入cin >> n >> k >> s;for (int i = 0; i < n; i++) {cin >> ladderScore >> patScore;if (ladderScore >= 175) {// 如果PAT分数达标if (patScore >= s) {total++;continue;}// 检查这个天梯赛分数是否已经推荐k次if (scoreCounts[ladderScore] < k) {total++;scoreCounts[ladderScore]++;}}}// 输出结果cout << total << endl;return 0;
}

这里就显示了一个问题C++STL库是真好用啊

注意事项:

  1. 使用C++的标准库中的unordered_map来替代手动实现的SimpleMapunordered_map是C++ STL中的一个高效的键值对容器。
  2. 使用C++的流输入输出来替代C的scanfprintf
  3. 不再需要手动实现initMapputget函数,因为unordered_map已经提供了相应的功能。

Java实现:

import java.util.HashMap;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int k = sc.nextInt();int s = sc.nextInt();int total = 0;HashMap<Integer, Integer> scoreCounts = new HashMap<>();for (int i = 0; i < n; i++) {int ladderScore = sc.nextInt();int patScore = sc.nextInt();if (ladderScore >= 175) {// 如果PAT分数达标if (patScore >= s) {total++;continue;}// 检查这个天梯赛分数是否已经推荐k次scoreCounts.putIfAbsent(ladderScore, 0);if (scoreCounts.get(ladderScore) < k) {total++;scoreCounts.put(ladderScore, scoreCounts.get(ladderScore) + 1);}}}System.out.println(total);}
}

五、实现代码过程中可能遇到的问题

数组:

  1. counts数组的大小应确保可以存放所有可能的天梯赛分数。
  2. 在检查每个学生的天梯赛分数是否被推荐超过K次时,需要确保先检查是否已经达到限制,然后再增加计数。
  3. 在处理满足条件的学生时,要确保不会重复计数。在给出的代码中,使用continue确保满足PAT成绩条件的学生不会被重复计算。
  4. 初始化counts数组时要确保其值全为0,以防止出现未定义的行为。

map:

  1. 使用了map数据结构,需要确保包含相关的库。
  2. 在遍历学生分数时,要确保已经被计入答案的学生不再被计算。

六、大师对我分析的评价

我的分析对题目的细节有深入的探讨,特别是我如何从题目中抽取关键信息并将它们逻辑化。以下是对我的分析的评价:

优点

  1. 详尽性:我非常详细地解析了题目提供的信息,确保没有遗漏关键点。
  2. 结构化:我的分析是结构化的,先后从“信息”到“分析”,再到“步骤”和“问题”,使读者很容易跟随我的思路。
  3. 场景考虑:我明确指出了两种主要场景——是否存在同分的情况。这是非常关键的,因为处理这两种场景是实现解决方案的核心。
  4. 清晰的步骤:我给出的处理步骤清晰且逻辑性强。

需要改进的地方

  1. 循环的理解:我提到需要循环k次来处理学生,但实际上只需要一次遍历即可,使用数据结构来跟踪每个分数的出现次数。
  2. 数据结构的应用:虽然我提到使用map,但实际上应该更明确描述如何使用map来跟踪每个分数的出现次数和推荐次数。
  3. 边界情况考虑:在分析时,可以考虑一些极端或边界情况,如所有学生的天梯赛分数都低于175或所有学生的PAT分数都低于S。

总体而言,我的分析是非常全面和透彻的,只需要在某些地方进行细微调整和完善。如果我继续按照这种方式对问题进行分析,无疑将在解决复杂问题时获得很好的效果。

七、从这到题目中我们能学到什么

我学到的

  1. 问题分析:如何从题目描述中抽取关键信息并根据这些信息构建解决方案。
  2. 数据结构的应用:了解到在某些问题中,如何有效地使用数据结构(如map)来简化和优化解题过程。
  3. 编程实践:通过实际编码,我不仅加深了对问题的理解,而且增强了编程能力。
  4. 测试和调试:在编写代码后,我可能遇到了需要调试的问题,从中我学习了如何识别、定位并解决这些问题。

需要提高的方面

  1. 深入理解数据结构:虽然我提到了使用map,但如何具体地和有效地应用它仍有待加深。
  2. 考虑边界情况:在解题时,考虑所有可能的边界和极端情况是很重要的,以确保解决方案的完整性和正确性。
  3. 优化算法:虽然我的初步方法可以解决问题,但总是有空间寻找更高效或更简洁的解决方案。
  4. 代码风格与组织:确保代码结构清晰、易于阅读和维护是编程的一个重要方面。随着我遇到更复杂的问题,代码的组织和风格将变得越来越重要。

这样的分析和反思对于提高问题解决技能和编程能力都是非常有价值的。继续分析和思考我遇到的每一个问题,无疑将加速我的学习和成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/172633.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水性杨花:揭秘CSS响应式界面设计,让内容灵活自如,犹如水之变幻

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、是…

Qt生成PDF报告

文章目录 一、示意图二、实现部分代码总结 一、示意图 二、实现部分代码 //! 生成测试报告 void MainWindow::createPdf(QString filename, _pdf_msg_& msg, const QMap<QString, int>& ok, const QMap<QString, int>& err) {//QDir dir;if(!dir.exis…

异步请求池——池式组件

前言 本文详细介绍异步请求池的实现过程&#xff0c;并使用DNS服务来测试异步请求池的性能。            两个必须牢记心中的概念&#xff1a; 同步&#xff1a;检测IO 与 读写IO 在同一个流程里异步&#xff1a;检测IO 与 读写IO 不在同一个流程 同步请求 与 异步请求…

Unity性能优化一本通

文章目录 关于Unity性能优化一、资源部分&#xff1a;1、图片1.1、 图片尺寸越小越好1.2、使用2N次幂大小1.3、取消勾选Read/Write Enabled1.4、图片压缩1.5、禁用多余的Mip Map1.6、合并图集 2、模型2.1.限制模型面数2.2.限制贴图的大小2.3.禁用Read/Write Enables2.4.不勾选其…

学习笔记:二分图

二分图 引入 二分图又被称为二部图。 二分图就是可以二分答案的图。 二分图是节点由两个集合组成&#xff0c;且两个集合内部没有边的图。换言之&#xff0c;存在一种方案&#xff0c;将节点划分成满足以上性质的两个集合。 性质 如果两个集合中的点分别染成黑色和白色&am…

Pytorch代码入门学习之分类任务(二):定义数据集

一、导包 import torch import torchvision import torchvision.transforms as transforms 二、下载数据集 2.1 代码展示 # 定义数据加载进来后的初始化操作&#xff1a; transform transforms.Compose([# 张量转换&#xff1a;transforms.ToTensor(),# 归一化操作&#x…

【QT开发(15)】QT在没有桌面的系统中可以使用

在没有桌面的系统中&#xff0c;可以使用QT库。QT库可以在没有图形用户界面&#xff08;GUI&#xff09;的环境中运行&#xff0c;例如在服务器或命令行终端中。 这样就可利用Qt的&#xff1a; 对象模型&#xff0c;信号和槽容器类多线程和多进程网络编程 等

wiresharak捕获DNS

DNS解析&#xff1a; 过滤项输入dns&#xff1a; dns查询报文 应答报文&#xff1a; 事务id相同&#xff0c;flag里 QR字段1&#xff0c;表示响应&#xff0c;answers rrs变成了2. 并且响应报文多了Answers 再具体一点&#xff0c;得到解析出的ip地址&#xff08;最底下的add…

CentOS 编译安装 nginx

CentOS 编译安装 nginx 修改 yum 源地址为 阿里云 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum makecache升级内核和软件 yum -y update安装常用软件和依赖 yum -y install gcc gcc-c make cmake zlib zlib-devel openss…

环形链表(C++解法)

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…

【计算机网络】认识协议

目录 一、应用层二、协议三、序列化和反序列化 一、应用层 之前的socket编程&#xff0c;都是在通过系统调用层面&#xff0c;如今我们来向上打通计算机网络。认识应用层的协议和序列化与反序列化 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应…

前端《中国象棋》游戏

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 查看视频 本程序是一个基于Html/css/javascrip的网页端象棋APP&#xff0c;其中引入JQuery来简便开发。 在程序中&#xff0c;使用一个Map二维数组来表示棋盘&#xff0c;通过给棋子设置不同的横坐…

FileWriter文件字符输出流

一.概念 以内存为基准&#xff0c;把内存中的数据以字符形式写出到文件中 二.构造器 public FileWriter(Filefile) 创建字节输出流管道与源文件对象接通 public FileWriter(String filepath) 创建字节输出流管道与源文件路径接通 public Filewriter(File file,boolean append) …

【MySQL】并发事务产生的问题及事务隔离级别

先来复习一下事务的四大特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是不可分割的最小操作单位&#xff0c;事务中的所有操作要么全部执行成功&#xff0c;要么全部失败回滚&#xff0c;不能只执行其中一部分操作。一致性&#xff08;Consisten…

卷积神经网络的感受野

经典目标检测和最新目标跟踪都用到了RPN(region proposal network)&#xff0c;锚框(anchor)是RPN的基础&#xff0c;感受野(receptive field, RF)是anchor的基础。本文介绍感受野及其计算方法&#xff0c;和有效感受野概念。 1.感受野概念 在典型CNN结构中&#xff0c;FC层(…

vue核心面试题汇总【查缺补漏】

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 很喜欢‘万变不离其宗’这句话&#xff0c;希望在不断的思考和总结中找到Vue中的宗&#xff0c;来解答面试官抛出的…

FPGA设计时序约束七、设置时钟不确定约束

一、背景 在之前的时序分析中&#xff0c;通常是假定时钟是稳定理想的&#xff0c;即设置主时钟周期后按照周期精确的进行边沿跳动。在实际中&#xff0c;时钟是非理想存在较多不确定的影响&#xff0c;存在时延和波形的变化&#xff0c;要准确分析时序也需将其考虑进来&#x…

06 _ 链表(上):如何实现LRU缓存淘汰算法

今天我们来聊聊“链表(Linked list)”这个数据结构。学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是LRU缓存淘汰算法。 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的CPU缓存、数据库缓存…

“节省内存、提升性能:享元模式的神奇之处“

概念 享元模式的本质是缓存共享对象&#xff0c;降低内存消耗。 是对象池的的一种实现&#xff0c;一句话用到了缓存了对方和池化技术的地方绝大多是享元模式的体现。 例如线程池&#xff0c;数据库连接池&#xff0c;字符串常量池 应用示例 String中的享元模式 public c…

Linux Centos7安装后,无法查询到IP地址,无ens0,只有lo和ens33的解决方案

文章目录 前言1 查看network-scripts目录2 创建并配置 ifcfg-ens33 文件3 禁用NetworkManager4 重新启动网络服务总结 前言 在VMware中&#xff0c;安装Linux centos7操作系统后&#xff0c;想查询本机的IP地址&#xff0c;执行ifconfig命令 ifconfig结果如下&#xff1a; 结…