← 返回课程路线 第四阶段 · S4-08 · 60 分钟

先保底再冲刺,稳住子任务得分

这一课只练一件事:题目按数据范围拆成多个时,如何在有限时间里稳稳拿到。做法是先写一份能过小数据的,再按的顺序挑战更难的子任务;写不出最优算法时,可以先用的简单实现去覆盖数据较小的子任务。必会:能圈出每个子任务的数据范围、能先写保底方案、能安排提交前的检查时间。最小示例:一道满分 100 分的题拆成两个子任务——子任务 1(1 <= n <= 1000,30 分,暴力 O(n²) 可过)、子任务 2(1 <= n <= 100000,70 分,需要 O(n log n))。你目前只会写 O(n²) 暴力。样例追踪:先写暴力覆盖子任务 1,本地用小数据测试通过,预计至少拿到 30 分;再尝试把算法优化到 O(n log n) 冲子任务 2 的 70 分;如果优化没调完,仍然提交能跑的暴力版本,保住已经确定的 30 分。边界是不能因为一心冲满分而不写任何代码(0 分)、也不能在合并优化代码时把还能跑的保底方案改坏。建议掌握:先完成有把握、分值明确的子任务,再挑战更难的子任务,不要把全部时间押在最难的部分。拓展:复杂度降级只是拓展技巧——用更简单但正确的实现去换取小数据子任务的分数,不强制现在就会写出满分算法。这里不会在浏览器里运行 C++。

必会:能划分可做部分;能先写保底方案;能安排检查时间 建议掌握:先易后难——先做有把握的子任务,再挑战更难的部分 拓展:复杂度降级——写更简单的实现先拿小数据子任务的分,不当硬门槛

任务 1:先选出该怎么定策略

先确定遇到多个时该按什么顺序做,再确定时间不够时该怎么保住已经确定的。点不认识的词可看基础解释。

必会:能说出为什么要先写;能说出时间不够时该提交哪个版本。这里不会在浏览器里运行 C++,只练习选择和走过程。

一道题拆成两个子任务:子任务 1(n≤1000,30 分,暴力可过)、子任务 2(n≤100000,70 分,需要 O(n log n))。你只会写暴力,应该先做什么?做题顺序 · 必会

比赛只剩 10 分钟,优化版本还没调试通过,暴力版本本地能跑,应该怎么做?保住部分分 · 必会