news 2026/4/23 11:28:11

2024年信息学奥赛CSP-S2提高组复赛题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2024年信息学奥赛CSP-S2提高组复赛题解

CCF CSP-S 2024 第二轮比赛

没想到 CSP-S 最后一题的难度就这么难了,周末做了一天,写到凌晨,写到崩溃

零、背景

今天来看看 2024 年 CSP-S 的四道题的题解吧。

A: 快慢指针

B: 区间问题

C: 贪心+动态规划+前缀和

D: 树形DP

一、决斗


题意:各一个数组,对于每个位置,可以随意选择另外一个位置,如果对方的值小于当前的值,则对方可以被杀死。

问如何选择,才能使得剩余未被杀死的位置最少。

思路:二分查找 或快慢指针

显然,需要排序,然后需要从最小或者最大的开始处理。

一开始有一个集合,代表所有数字都未被杀死。

假设从最小的开始枚举,则每次只需要判断集合里最小的元素是否可以被杀死即可。

这时候,集合是顺序访问的,所以可以使用数组来储存,枚举的是快指针,尚未杀死的最小值就是慢指针。

int l = 0, r = 1; while (r < n) { if (nums[r] > nums[l]) { l++; } r++; } printf("%lld\n", r - l);

假设从最大值开始枚举,则每次需要找到小于最大值的最大元素。
这个需要使用二分查找。

multiset<ll> H; ll ans = n; for (int i = n - 1; i >= 0; i--) { ll v = nums[i]; auto it = H.lower_bound(v); if (it == H.begin()) { continue; // 没有更小值,无法删除 } it--; H.erase(it); ans--; } printf("%lld\n", ans);

二、超速检测

题意:给一段长度为 L 的路,一开始有 n 个车以指定起点以及指定起始速度在从南往北行驶。

另外这些车还有自己的加速度,负数代表减速。

车的速度为0时停止,否则直到开出这段路。

现在路上有 m 个监控,车以超过 V 的速度超过某个监控,则算拍到超速,问哪些车会被抓拍到超速。

另外,最多关闭多少个监控,抓拍到的超速的车辆不会漏。

思路:区间问题。

第一步是计算出每个车的超速路段。

超速路段计算需要解方程。

起始速度 v, 加速度 a,目标速度 V,则需要时间t=(V-v)/a

行驶距离是:(v+V)*t/2

假设计算出来的是浮点数,例如7.4,再位置7不会超速,位置8才超速。

假设计算出来的的是整数,例如7,则同上,位置7不会超速,位置8才超速。

所以上面的公式直接按整数向下取整加一即可。

for (ll i = 0; i < n; i++) { ll d, v, a; scanf("%lld%lld%lld", &d, &v, &a); if (a > 0) { if (v > V) { // 起始超速,结束超速 nums0.push_back({d, L}); } else { ll S = (V + v) * (V - v) / (2 * a) + 1; if (d + S > L) { //行驶 S 距离超过 V continue; } nums0.push_back({d + S, L}); } } else if (a < 0) { // 减速 if (v <= V) { continue; // 起始未超速 } a = -a; ll S = (V + v) * (v - V) / (2 * a); if (S * 2 * a == (V + v) * (v - V)) { S--; } nums0.push_back({d, min(L, d + S)}); } else { // 匀速 if (v <= V) { continue; } nums0.push_back({d, L}); } }

之后二分查找来判断这个路段是否有摄像头即可判断这个车是否可以被抓拍到。

nums1.reserve(n); // 被拍到的车辆 for (auto [l, r] : nums0) { auto it = lower_bound(caremas.begin(), caremas.end(), l); if (it == caremas.end()) { continue; } if (*it > r) { continue;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 10:28:20

结合Unity构建虚拟助手交互界面

结合Unity构建虚拟助手交互界面 在企业知识管理日益复杂的今天&#xff0c;员工面对海量文档却难以快速获取关键信息——会议纪要散落在不同邮箱、产品手册更新频繁、跨部门协作时总在重复提问。传统的搜索框加列表式结果早已无法满足高效工作的需求。与此同时&#xff0c;大语…

作者头像 李华
网站建设 2026/4/20 14:28:05

书匠策AI:本科论文创作路上的“智能灯塔”,照亮学术探索每一步

在本科学习的广阔天地里&#xff0c;论文写作宛如一座巍峨的山峰&#xff0c;既是对学生知识积累与思维能力的全面检验&#xff0c;也是通往更高学术殿堂的必经之路。然而&#xff0c;面对纷繁复杂的学术信息、严谨规范的论文格式以及创新突破的迫切需求&#xff0c;许多学子常…

作者头像 李华
网站建设 2026/4/23 9:57:42

结合PaddleOCR提升中文文档识别准确率

结合PaddleOCR提升中文文档识别准确率 在企业知识管理的日常实践中&#xff0c;一个看似简单却频繁出现的问题正困扰着许多团队&#xff1a;如何让AI真正“读懂”那些扫描版合同、模糊发票或手写批注的PDF文件&#xff1f;大语言模型&#xff08;LLM&#xff09;虽能流畅生成报…

作者头像 李华
网站建设 2026/4/23 9:59:06

基于会话上下文自动生成知识补全建议

基于会话上下文自动生成知识补全建议 在企业内部&#xff0c;员工常常面临这样的困境&#xff1a;明明公司有一整套完整的制度文档&#xff0c;但当真正需要查询“项目延期如何上报”时&#xff0c;却不知道该翻哪份文件、用什么关键词搜索。更常见的是&#xff0c;问完一个问题…

作者头像 李华
网站建设 2026/4/23 9:53:09

网盘直链下载助手:LinkSwift提升您的下载体验

还在为网盘下载速度慢而烦恼吗&#xff1f;LinkSwift网盘直链下载助手正是您需要的实用工具。这款基于JavaScript开发的开源工具&#xff0c;能够轻松获取八大主流网盘文件的下载地址&#xff0c;简化验证码输入流程&#xff0c;优化下载体验。 【免费下载链接】Online-disk-di…

作者头像 李华