news 2026/6/26 4:03:08

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/6/18 7:46:17

跨境电商多语言客服知识库——采用anything-llm统一管理

跨境电商多语言客服知识库——采用 AnythingLLM 统一管理 在全球化浪潮推动下&#xff0c;跨境电商已从“可选项”变为零售企业的核心增长引擎。然而&#xff0c;业务版图的扩张也带来了前所未有的服务挑战&#xff1a;客户遍布五大洲、使用数十种语言、咨询内容横跨产品参数、…

作者头像 李华
网站建设 2026/5/28 20:20:13

网上订餐|基于springboot网上订餐系统(源码+数据库+文档)

网上订餐 目录 基于springboot vue网上订餐系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue网上订餐系统 一、前言 博主介绍&#xff1a;✌️大…

作者头像 李华
网站建设 2026/6/9 20:52:18

当你的论文卡在“语言不够地道、逻辑不够严密、格式总被退”时,或许不是你不够努力,而是缺了一个能“读得懂科研”的AI协作者——书匠策AI期刊写作功能的沉浸式观察手记

在科研写作这条路上&#xff0c;我们常常不是输在数据&#xff0c;也不是败在创新&#xff0c;而是困在“表达”上。 你是否也曾这样&#xff1a;明明实验做得扎实&#xff0c;图表清晰有力&#xff0c;却在写论文时举步维艰&#xff1f; - 英文表达总显得“中式”&#xf…

作者头像 李华
网站建设 2026/6/21 3:31:28

leetcode 769. Max Chunks To Make Sorted 最多能完成排序的块-耗时100%

Problem: 769. Max Chunks To Make Sorted 最多能完成排序的块 解题过程 耗时100%&#xff0c;最多的块只需要满足一段区间内的数字排序以后可以不用移动即可&#xff0c;双指针&#xff0c;l 最小值&#xff0c;r 最大值&#xff0c;start 这个区间的起始数字&#xff0c;从左…

作者头像 李华
网站建设 2026/6/15 19:05:40

【Open-AutoGLM文档实战手册】:3天实现自动化提示工程落地

第一章&#xff1a;Open-AutoGLM 框架概述Open-AutoGLM 是一个面向通用语言模型自动化任务的开源框架&#xff0c;旨在简化自然语言处理任务中的模型调用、流程编排与结果优化过程。该框架融合了提示工程、自动推理链生成与多模型协同机制&#xff0c;适用于问答系统、文本生成…

作者头像 李华