先保底再冲刺,稳住子任务得分
这一课只练一件事:题目按数据范围拆成多个时,如何在有限时间里稳稳拿到。做法是先写一份能过小数据的,再按的顺序挑战更难的子任务;写不出最优算法时,可以先用的简单实现去覆盖数据较小的子任务。必会:能圈出每个子任务的数据范围、能先写保底方案、能安排提交前的检查时间。最小示例:一道满分 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 分钟,优化版本还没调试通过,暴力版本本地能跑,应该怎么做?保住部分分 · 必会
任务 2:按划分、保底、冲刺三步稳住得分
最小示例:一道满分 100 分的题拆成两个子任务——子任务 1(1 <= n <= 1000,30 分)、子任务 2(1 <= n <= 100000,70 分,需要 O(n log n))。按顺序点三步:先划分范围,再写,最后尝试或优化。这里不会在浏览器里运行 C++。
必会:能解释每一步为什么这样做。边界:不要跳过“保底方案”直接冲最优解;提交前必须重新跑一遍保底方案,确认它没有被后续修改的代码破坏。
- // 题目:满分 100 分,子任务 1(n≤1000,30 分),子任务 2(n≤100000,70 分)
- // 划分:子任务 1 用 O(n²) 暴力可过;子任务 2 需要 O(n log n)
- // 保底:先写 O(n²) 暴力,本地用子任务 1 的样例测试通过
- // 冲刺:尝试优化到 O(n log n);没调完就保留暴力版本兜底 → 至少 30 分
三步走完了,现在把“保底方案”落成一行代码:读入 n 之后,先用 判断这次的数据落在哪个子任务里——落在子任务 1 就交保底答案,然后立刻结束程序,别让后面还没调通的优化解法把保底分也弄丢。下面是只读脚手架,只留一空给你敲键盘;这里不会在浏览器里运行 C++。
- // 题目:满分 100 分。子任务 1:1 <= n <= 1000(30 分);子任务 2:1 <= n <= 100000(70 分)
- // brute(n) 保底方案:暴力 O(n²),只够过子任务 1(已写好,这里不展开)
- // fast(n) 冲刺方案:优化 O(n log n),能过子任务 2(还没调通)
- int main() {
- int n;
- cin >> n;
- // 落在子任务 1 就交保底,稳稳拿 30 分
- cout << fast(n); // 子任务 2:n 更大,只能靠优化解法
- return 0;
- }
if (n <= 1000) { cout << brute(n); return 0; } // 子任务 1 的范围:先交保底答案,再 return 0; 结束程序
任务 3:确定先易后难的顺序,并安排检查时间
建议掌握:先完成有把握、分值明确的子任务,再挑战更难的子任务,这就是;不要把全部时间押在最难的部分,导致连保底分都没时间写。拓展:是指暂时写不出最优算法时,先用更简单但正确的实现覆盖小数据子任务,现在只需要认识这个概念。
必会 / 建议掌握 / 拓展:必会是划分子任务、先写保底方案、安排检查时间。建议掌握是先易后难的做题顺序。复杂度降级是拓展,现在不用当硬门槛。
- // 顺序:先做有把握、分值明确的子任务 1,再挑战更难的子任务 2
- // 边界 1:暴力保底方案已经能过子任务 1,不能因为改优化代码把它弄坏
- // 边界 2:提交前留出检查时间,重新跑一遍保底方案确认没被破坏
- // 复杂度降级:写不出 O(n log n) 时,先用更简单的实现覆盖小数据(拓展)
先选出正确的做题顺序:
再选出提交前该怎么安排检查时间:
任务 4:随机小测,看看你是否真的懂了
每次从本课题库抽出三道不同的选择题。题目与解析已通过校验,答完后看解析,不要只看分数;拿不准就回到对应任务再看一遍。