📷 题解插图【CSP】CSP-XL 2025辽宁复赛真题-第三题, 小L打比赛(match)
CSP-XL 2025辽宁复赛真题-第三题,小L打比赛(match),贪心思想考点,个人认为约相当于GESP四级+,五级-,难度⭐⭐★☆☆。
CSP-XL 2025辽宁复赛真题-第三题, 小L打比赛(match)
题目要求

题目分析
解题思路
-
题意再述
小 L 有 场比赛,第 场开始时间为 ,结束时间为 (时间均为整数分钟)。
他一旦参加某场比赛就必须完整打完,不能中途加入或退出;且任意两场比赛不能重叠(即前一场结束时间必须严格小于后一场开始时间)。
目标:在以上规则下,最多能完整参加多少场比赛。 -
贪心核心——“结束时间最早”策略
直觉:越早结束的比赛,留给后面可选的“剩余时间”越多。
证明(交换论证):
假设最优解中第一场结束时间不是全局最早结束的,那把第一场替换成结束时间最早且与之兼容的比赛,不会减少后续可选场次,反而可能腾出更多时间。因此“结束最早”策略不会比任何最优解差,故其本身就是最优。算法步骤:
① 把所有比赛按结束时间 升序排序;
② 用变量cur_end记录已选的最后一场的结束时间;
③ 顺序扫描排序后的列表,若当前比赛开始时间cur_end,则选中该场,更新cur_end,计数器count++;
④ 扫描完毕,count即为答案。 -
复杂度
- 时间:排序 ,贪心扫描 ,总体 。
- 空间:仅用到常数级额外变量。
-
实现细节
- 结构体存
(start, end),用std::sort自定义比较函数cmp(a,b){return a.end<b.end;}。 - 文件读写按复赛要求用
freopen。
- 结构体存
示例代码
#include <algorithm>
#include <iostream>
struct Match {
int start = 0; // 比赛开始时间
int end = 0; // 比赛结束时间
};
// 按结束时间升序排序的比较函数
bool cmp(Match a, Match b) { return a.end < b.end; }
// 全局数组,存储所有比赛
struct Match matches[500005];
int main() {
freopen("match.in", "r", stdin);
freopen("match.out", "w", stdout);
int n;
std::cin >> n;
// 读入 n 场比赛的起止时间
for (int i = 0; i < n; i++) {
std::cin >> matches[i].start >> matches[i].end;
}
// 按结束时间升序排序,为贪心选择做准备
std::sort(matches, matches + n, cmp);
int count = 1; // 至少能打一场比赛
int cur_end = matches[0].end; // 当前所选最后一场的结束时间
// 贪心选择:每次挑结束时间最早且不与上一场比赛冲突的比赛
for (int i = 1; i < n; i++) {
if (matches[i].start > cur_end) { // 无冲突
count++;
cur_end = matches[i].end; // 更新最后结束时间
}
}
std::cout << count << std::endl; // 输出最多能观看的比赛场数
return 0;
}
附:样例和测试数据下载地址:
链接:https://pan.quark.cn/s/83ce9a16c3fc?pwd=kjYS 提取码:kjYS
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
【CSP】CSP-XL 2025辽宁复赛真题-第二题, 积分(points)
CSP-XL 2025辽宁复赛真题-第二题,二维数组前缀和考点,个人认为约相当于GESP四级+,五级-,难度⭐⭐★☆☆。
【CSP】CSP-XL 2025辽宁复赛真题-第四题, 购物(buy)
CSP-XL 2025辽宁复赛真题-第四题,购物(buy),也是本次考试最后一题,难度最大,DFS思想考点,属于GESP六级考纲内容,难度⭐⭐⭐☆☆。
【CSP】CSP-J 2019 第一轮真题解析(一):单项选择题
2019 年是 NOIP 转型为 CSP 的第一年,本年度的 CSP-J(入门级/普及组)初赛试卷难度适中,非常注重计算机的基础理论广度以及算法执行的模拟能力。 本文将为您先展示真题原题,然后进行逐题深度解析,帮助 GESP 及 CSP-J 的备考同学精准对标考点。
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com