读题 → 估复杂度 → 定算法 → AC · competitive thinking
新手拿到题就动手写,老手先看数据范围。数据范围决定了能用什么复杂度,复杂度决定了能用什么算法——这一步走对,题目就过了一半。
1 秒时限大约能跑 10⁸ 次操作。n=10⁵ 时 O(n²)=10¹⁰,超时 100 倍;O(n log n)≈1.7×10⁶,绰绰有余。先估复杂度再选算法,是竞赛选手和业余选手的分水岭。估错了,代码再漂亮也是 0 分。
下面是三道典型竞赛题,每题给你数据范围,让你选合适的算法复杂度。选对进下一关,看你能拿几分。
第一遍懂题意,第二遍找边界,第三遍想反例。读错题是竞赛第一大杀手。
看数据范围反推可用复杂度,再据此筛选算法。先排除超时的。
选算法后手算小例子,确认逻辑无误,再动手写。
边界(n=0、n=1、最大值)最易错,单独测一遍再交。
这个流程的核心是先想后写。业余选手 80% 时间在写代码、20% 在调试;OI 选手反过来,80% 时间在想、20% 在写——想清楚了,代码一次就对。竞赛比的是判断力,不是手速。这套思维迁移到工程上也成立:先设计再实现,比边写边改高效十倍。