【CSP试题回顾】201709-2-公共钥匙盒

CSP-201709-2-公共钥匙盒

关键点

1. 选择恰当的数据结构存储钥匙的存取操作

结构体MyKey包含三个字段:timeoptindex

  • time字段表示操作发生的时间点。对于取钥匙的操作,这个时间就是老师上课的开始时间;对于还钥匙的操作,这个时间是老师上课结束的时间(也就是开始时间加上持续时间)。
  • opt字段是一个布尔值,用于表示是取钥匙还是还钥匙。在我们的案例中,我们使用1来表示取钥匙,0来表示还钥匙。这个字段对于区分同一时间点发生的不同操作类型很重要。
  • index字段表示钥匙的编号,即它对应哪一把钥匙。

2. 按照题目描述的优先级大小排序

题目要求在处理钥匙存取操作时遵循一定的优先级顺序:首先按照操作的时间排序,如果时间相同,则取钥匙的操作应在还钥匙的操作之前处理,如果仍然相同,则按照钥匙的编号排序。

实现这个需求,我们使用自定义的比较函数myCmp来为keyList数组进行排序。这个比较函数遵循以下规则:

  • 首先比较time字段。较早的时间应该排在前面。
  • 如果time字段相等,则比较opt字段。由于我们规定取钥匙(1)应该在还钥匙(0)之前,所以opt较大的应该排在前面。
  • 如果opt也相同,则比较index字段,即钥匙编号,较小的编号排在前面。

这个排序规则确保了我们可以按照题目要求的顺序处理所有的钥匙存取操作。经过排序后,我们的算法将按照正确的时间顺序和优先级来模拟每一次钥匙的取还过程,从而准确地重现钥匙盒中钥匙的最终状态。

解题思路

  1. 输入处理:首先,代码从标准输入读取两个整数N和K,其中N表示钥匙总数(和挂钩的数量相同),K表示总共有多少个教师需要使用钥匙。然后,代码读取接下来的K行输入,每行包含三个整数w, s, c,分别代表一位老师使用的钥匙编号、上课开始的时间和上课的时长。

  2. 初始化钥匙盒状态:初始化一个名为box的整数向量,大小为N,代表钥匙盒的状态。初始状态下,钥匙是按照编号从小到大顺序排列的,即box[i] = i + 1

  3. 构造时间线:对于每一位老师,记录两个时间点:取钥匙的时间和还钥匙的时间。这是通过构造一个结构体数组keyList来实现的,每个结构体元素记录了时间点、操作类型(取还)和钥匙编号。其中,opt字段用于区分是取钥匙(1)还是还钥匙(0)。

  4. 时间线排序:使用自定义的比较函数myCmpkeyList进行排序。排序规则是:首先按时间点排序,如果时间点相同,则取钥匙的操作排在还钥匙的操作之后,如果还存在相同,则按钥匙编号进行排序。

  5. 模拟钥匙的取还过程:遍历排序后的时间线,根据操作类型更新钥匙盒box的状态。如果是还钥匙(opt为0),找到box中第一个空位置(用-1表示),并将相应的钥匙编号放在那里。如果是取钥匙(opt为1),找到钥匙盒中对应的钥匙并将其位置设为-1,表示钥匙被取走。

  6. 输出最终钥匙盒状态:遍历box向量,输出每个挂钩上的钥匙编号。这就是最终的钥匙盒状态。

完整代码

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;struct MyKey
{int time; // 操作时间bool opt; // 0-还 1-取int index; // 钥匙序号
};bool myCmp(MyKey& a, MyKey& b) { // 优先级:操作时间 > 还/取 > 序号if (a.time == b.time) {if (a.opt == b.opt)  return a.index < b.index;else{if (!a.opt) return true;else if (!b.opt) return false;}}return a.time < b.time;
}int N, K, w, s, c;
vector<MyKey>keyList;int main() {cin >> N >> K;vector<int>box(N);for (int i = 0; i < box.size(); i++){box[i] = i + 1;}for (int i = 0; i < K; i++){cin >> w >> s >> c;keyList.push_back({ s,1,w });keyList.push_back({ s + c,0,w });}sort(keyList.begin(), keyList.end(), myCmp);for (auto& it : keyList) {if (!it.opt) // 还钥匙{for (auto& jt : box) {if (jt == -1){jt = it.index;break;}}}else // 取钥匙{for (auto& jt : box) {if (it.index == jt){jt = -1;break;}}}}for (auto& it : box) {cout << it << " ";}return 0;
}

请添加图片描述


文章部分内容参考自:CSP:公共钥匙盒

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

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

相关文章

Ollama 只安装 Ollama,本地快速部署谷歌开源大模型Gemma(基于Ollama)

参考&#xff1a;本地快速部署谷歌开源大模型Gemma(基于Ollama) - 知乎 确保系统更新: Bash sudo apt update && sudo apt upgrade 需要先下载Ollama&#xff0c;版本要求0.1.26及以上 运行curl -fsSL https://ollama.com/install.sh | sh 监听 Ollama API 接…

C++ 之LeetCode刷题记录(三十九)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用…

2023年河北省职业院校技能大赛(高职组) “云计算”赛项任务书

2023年河北省职业院校技能大赛 “云计算”赛项任务书 第一场次&#xff1a;私有云(50分)任务一、私有云服务搭建(15分)任务二、私有云服务运维(25分)任务三、私有云运维开发(10分&#xff09; 第二场次&#xff1a;容器云任务一、容器云服务搭建任务(5分)任务二、容器云应用部署…

2024年春招助学活动:一批FPGA高端项目让你轻松拿到大厂offer

这里写目录标题 1、前言2、FPGA行业现状3、简历怎么写4、FPGA高端项目4.1 图像类&#xff1a;FPGA图像缩放多路视频拼接4.2 通信类&#xff1a;千兆网UDP协议栈4.3 通信类&#xff1a;万兆网UDP协议栈4.4 图像通信综合&#xff1a;FPGA图像缩放UDP网络视频传输4.5 图像高速接口…

零基础学习JS--基础篇--JavaScript类型化数组

JavaScript 类型化数组是一种类似数组的对象&#xff0c;并提供了一种用于在内存缓冲中访问原始二进制数据的机制。 引入类型化数组并非是为了取代 JavaScript 中数组的任何一种功能。相反&#xff0c;它为开发者提供了一个操作二进制数据的接口。这在操作与平台相关的特性时会…

Java SE String类(一):常用方法(上)

1. 常用方法 1.1 字符串构造 String类的常用构造方法只有以下三种 public class Main {public static void main(String[] args) {String s1 "hello";//使用常量串进行构造String s2 new String("hello");//创建String对象char[] array {h,e,l,l,o};…

DeepLearning in Pytorch|我的第一个NN-共享单车预测

目录 概要 一、数据准备 导入数据 数据可视化 二、设计神经网络 版本一 版本二&#xff08;正片&#xff09; 三、测试 小结 概要 我的第一个深度学习神经网络模型---利用Pytorch设计人工神经网络对某地区租赁单车的使用情况进行预测 输入节点为1个&#xff0c;隐含…

大预言模型——ChatGPT,Claude3、Sora、等技术

原文链接&#xff1a;大预言模型——ChatGPT,Claude3、Sora、等技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596849&idx3&sn111d68286f9752008bca95a5ec575bb3&chksmfa823ad6cdf5b3c0c446eceb5cf29cccc3161d746bdd9f26cc060f78c359ec3e2a8f35…

预测建模案例-预防机器故障

预测分析是一种使用当前数据和历史数据来预测活动、行为和趋势的高级分析形式。它涉及将统计分析技术、数据查询和机器学习算法应用于数据集。预测分析还涉及创建预测模型&#xff0c;以对特定操作或事件发生的可能性设置数值或评分。 预测分析寻找数据模式并预测未来趋势&…

day1-C++

1>提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成。 代码&#xff1a; #include <iostream> #include <string.h> using namespace std;int main() {string str ;int low 0, …

智慧公厕系统架构分析及应用探索

智慧公厕是运用物联网技术和云计算平台&#xff0c;实现对公共厕所的智能管理和优化的未来式公共厕所信息化整体解决方案。该系统由应用层、平台层、传输层和感知层组成&#xff0c;各层相互配合&#xff0c;共同构建一个高效、智能的公厕运营环境。 一、感知层&#xff1a; …

Android Kotlin知识汇总(三)Kotlin 协程

Kotlin的重要优势及特点之——结构化并发 Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理&#xff0c;例如网络调用、本地数据访问等任务的管理。本主题介绍如何使用 Kotlin 协程解决以下问题&#xff0c;从而让您能够编写出更清晰、更简洁的应用代…

Vue基础之Vuex状态管理

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a; 给自己一个梦想&#xff0c;给世界一个惊喜。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章目录 什么是Vuex&…

Jira自动化的实用工具——ScriptRunner简介及最佳实践

近日&#xff0c;龙智举办的DevSecOps研讨会年终专场“趋势展望与实战探讨&#xff1a;如何打好DevOps基础、赋能创新”在上海圆满落幕。龙智Atlassian技术与顾问咨询团队&#xff0c;以及清晖、JamaSoftware、CloudBees等生态伙伴的嘉宾发表了主题演讲&#xff0c;分享他们在D…

免费分享一套SpringBoot+Vue体育馆(预约)管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue体育馆(预约)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue体育馆(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue体育馆(预约)管理系统 Java毕…

【高通camera hal bug分析】高通自带相机镜像问题

首先打了两个log&#xff0c;一个是开启镜像的log&#xff0c;还有一个是没有开启镜像的log&#xff0c;如果我们开启镜像以后&#xff0c;观察开启镜像log发现 , 这段代码走的没有任何问题&#xff0c;因为Flip的值等于1了。 关闭镜像log如下&#xff1a; 如果我们不开启镜像…

灰度发布难以追踪?你可能用错了工具

灰度发布进行可观测性的主要方式是通过收集和分析用户在使用新版本产品或服务时的数据&#xff0c;以此来评估新版本的性能、稳定性和用户满意度。这个过程通常包括以下几个步骤&#xff1a; 定义观测指标&#xff1a;首先&#xff0c;需要定义一套合适的观测指标&#xff08;…

Java Day7 常用API

文章目录 1、Arrays1.1 简述1.2 如何比较对象数组1.2.1 方法1.1.2.2 方式2 2、Lambda3、方法引用3.1 静态方法的引用3.2 实例方法引用3.3 特定类型方法引用3.4 构造器引用 1、Arrays 1.1 简述 操作数组的一个工具类 常见方法 int[] arr{10,20,30,50,40};//将 数组的内容 组…

彩色gif闪图怎么做?分享gif动画的方法

在现在的媒体时代&#xff0c;动态图片已经成为了最流行的分享信息的方式。能够传达动态的视觉效果。那种带有动态效果的闪动文字图片要怎么制作呢&#xff1f;很简单&#xff0c;通过使用在线制作闪字图片工具&#xff0c;上传多张文字内容相同&#xff0c;颜色、位置不同的jp…

【网络原理】使用Java基于TCP搭建简单客户端与服务器通信

目录 &#x1f384;API介绍&#x1f338;ServerSocket API&#x1f338;Socket API &#x1f340;TCP中的长短连接&#x1f333;建立TCP回显客户端与服务器&#x1f338;TCP搭建服务器&#x1f338;TCP搭建客户端 ⭕总结 TCP服务器与客户端的搭建需要借助以下API &#x1f384;…