资讯详情

ACM区域赛13题补12道:从现场坐牢到高效复盘的完整经验

📅 2026/10/16 11:51:34 | 华诺云谱 👁 阅读
ACM区域赛13题补12道:从现场坐牢到高效复盘的完整经验
上海站出来的时候我在地铁上把那几道没做出来的题面截图又翻了一遍。那一场的感觉到现在都记得13题开局前四个签得飞快后面就一路坐牢最后两小时基本是在“我能写出来”和“我写不出来”之间反复横跳。回宿舍放下书包没干别的直接开了补题模式目标定得很明确——13道题补完12道剩一道计算几何实在啃不动最后就成了“12/13”。这篇就是这次补题的完整复盘。会把现场怎么崩的、回来怎么安排补题顺序、几道好题卡的点和思维转弯的过程都写出来。如果你在准备区域赛或者打完一场觉得自己明明会做却总是差一口气这篇文章应该能帮你少走不少弯路。1. 现场赛复盘从前几题的开门红到后两小时的集体坐牢1.1 开场的扫题方式签到题拼的不是手速是判断速度区域赛开局前半小时最重要的不是抢到第一发AC而是用最短的时间把题面过一遍判断哪些是真正的签到题。我们三个人的分工很简单各自从不同方向扫题每隔几分钟口头sync一遍看到的关键信息比如“这题像最短路”“这题像是纯模拟”“这题有取模可能数论签到”。这个环节的核心不是谁手快而是不要在一道“看起来很简单”的题上过度确认。举个例子打开题面发现一个题讲的是某个字符串前缀是否合法正常人会觉得直接排序判断相邻项就行。但如果三个人都凑过去确认花掉的就不仅是三份理解成本还有键盘空转的时间。正确做法是一个人确定思路后立刻上机另外两个人继续扫后面的题遇到疑似卡点再喊人讨论。我们前三道题基本都是这个节奏当时感觉自己状态非常好。但这里有个很隐蔽的问题签到题过得太顺会让队伍产生一种“这场稳了”的错觉。等到第五题、第六题难度突然上来反差感会放大挫败情绪。这一点在后面详细说。1.2 中段的跟榜策略写题的人、看题的人、随时准备换思路的人中段时间是整个五小时里最考验队伍配合的阶段。3人共享一台机器最容易出现的问题就是“有两个人同时想上机”结果要么是临时协商浪费几分钟要么是正在写题的人被频繁打断导致一次提交需要的时间被拉长。我们当时的做法算是自己摸索出来的“口头契约”谁上机写题必须先把一句话思路和预期复杂度说清楚比如“我准备用并查集离线做复杂度O(n log n)大概10分钟内能写完”。这句话的作用不是约束别人而是逼迫自己在写之前把逻辑理清。另一个人在旁边看题如果发现思路有问题不要立刻打断写题的人而是先把反例记下来等对方写完当前段落再沟通。这个策略前期效果很好但到了后段当题目越来越难我们内部开始出现一种微妙的“选择困难”每道题看起来都有希望每道题又都不太能确定能做对。这种状态下队伍会不自觉地陷入“浅尝辄止”循环——这题想一会儿那题想一会儿最后一题都没推进到位。1.3 后段心态崩盘的那道数据结构题现场真正让我难受的不是不会做而是一道只要冷静下来其实复杂度很标准的题。其实补题的时候发现做法非常普通先读入所有操作离线排序后用某个数据结构维护一下就行了难度属于“训练题里的常规题”。但当时我们在这个题上硬生生卡了一个多小时原因特别蠢——我们一直在纠结在线做法觉得题目要求必须实时回答于是拼命想在线的log级别数据结构把自己绕进去了。其实只要把题意多读一遍就会发现它压根没有强制在线。这种错误放在训练里谁都能看出来但在赛场上一着急整个人就会钻进牛角尖。后来复盘时我把这个教训写进了自己的比赛checklist里任何看起来需要复杂数据结构的题第一件事不是想数据结构而是确认是否允许离线处理。这个习惯在后来的训练中帮我省了非常多时间。2. 补题排期13道题不是按题号顺序刷的2.1 先把题目分层难度、类型、预计耗时区域赛回来以后我做的第一件事不是打开题单从头刷而是花了一个晚上把13道题全部过了一遍题面按“当前水平下的大致难度”排了个优先级。这个动作非常关键因为它把补题从“被动完成任务”变成了“主动管理项目”。我当时的分类大概是这样的题号核心类型现场状态补题预计耗时A / B / C签到与入门思维现场AC各20分钟复查D贪心 堆的反悔操作现场卡死一个晚上E图论最短路变体现场未做半天F数据结构离线处理现场卡死一个晚上G组合计数 模运算现场未做半天到一天H构造题现场未做半天IDP 单调性优化现场未做一天J / K综合思维 / 细节突破现场无头绪两天L计算几何现场未做长期搁置这个表格是按照“投入产出比”排序的不是从简单到困难。为什么因为补题的核心目标是缩小“现场没做出来”和“其实会做”的差距。比如D题和F题现场卡死的原因主要是紧张和方法选择失误不是真的不会这类题优先补能让自信心迅速恢复。而L题这种计算几何如果知道自己基本功不足就没必要赌在一道题上消耗两周。2.2 一题三遍看懂标程只是第一遍很多人的补题方式是打开题解读一遍觉得“哦原来是这样”然后关掉网页自我感觉已经会了。等到下次遇到同类型的题依然没有思路。这个问题我踩过很多次所以这次补题给自己定了一个“一题三遍”的规则。第一遍看标程或者可靠的题解重点是理解算法为什么这样设计而不是算法执行了什么。我会在纸上画一下关键样例的推导过程把每个步骤的变量变化标出来。第二遍关掉题解重新实现一遍不追求一次通过但必须总结出错在什么地方。第三遍隔两天之后把这道题当新题再做一遍这次不看任何资料而且尝试优化代码结构或寻找更短的做法。三遍做完一道题的收益至少是表面的三倍。因为第二遍会发现你的实际盲区在哪里第三遍则是在检验这个盲区是否被真正修复。我自己切身体会最深的是D题——第一遍觉得自己理解了一个很巧妙的贪心思路第二遍写着写着就发现实现细节和我脑子里的模型根本对不上第三遍重写时才算真正建立起了“遇到这类题先想到反悔堆”的条件反射。2.3 48小时卡题规则死磕是有上限的不少选手补题喜欢一次性死磕到底那种“今天不AC不睡觉”的决心我很佩服但对大部分人的时间安排来说其实是透支行为。这次我给自己立了一个规则一道题从开始补到有实质突破时间上限是48小时。如果48小时内没有写出一个能跑出正确答案的版本就先把这题挂起隔几天再回头看。死磕会造成两个问题一是认知窄化你会在自己的错误思路上越走越深而正确思路往往需要跳出这个循环以后才能看见二是时间消耗过猛导致剩下十几道题的补题计划整体延后。挂起不是放弃而是给大脑一个后台处理的机会。我补F题时就是这样前一天晚上怎么都调试不过第二天去吃了个早饭回来重读了一遍题意瞬间发现是自己对“离线”二字的理解出了偏差改完数据顺序直接AC。3. 三道有代表性的好题从错误算法一路修到正解3.1 看起来是排序的贪心实际需要“反悔”操作D题是我们现场的卡题重灾区。题面可以简化为有若干任务每个任务有各自的截止时间、收益、耗时要选出总收益最大的一组任务并且每个任务必须在截止时间前完成。直觉上很容易想到“按截止时间排序然后依次做”的策略现场我们也确实是这样做的但很快就被自己举出的反例推翻了一个耗时短但收益低的任务和一个耗时长但收益高的任务在时间冲突时未必应该保留后者因为它可能挤掉更多后面的任务。正确做法是维护一个小根堆按截止时间处理每个任务先把当前任务加入堆如果当前已完成时间超过截止时间就弹出收益最小的任务。这样本质上是允许已经选中的任务“被替换”也就是常说的可撤销贪心。这类题的核心思维是不要只做一次贪心选择要设计一种机制让错误的早期选择能在后期被修正。伪代码大概是这样的按截止时间升序排序 now 0 for 每个任务: now 耗时 push(收益) if now 截止时间: 弹出收益最小的任务 now - 该任务耗时这道题教会我的不是这个模板本身而是“贪心不等于排序加选择也可以排序加替换”。以后凡是遇到“若干个候选里选最优组合且选择之间互相挤占资源”的问题我第一反应都是看看能不能用堆来反悔。3.2 数据结构题的优化链条暴力到分块到离线F题现场卡了一个多小时补题时发现做法很清晰属于典型的数据结构套题有一系列操作需要支持区间修改、区间查询但是修改操作的形式比较特殊不是常见的加值而是某种映射。我们现场一直想在线用高级数据结构硬刚比如平衡树、线段树套平衡树结果越写越复杂最后连样例都过不了。补题时按照“暴力解法→分块→离线优化”的顺序推了一遍才意识到这题真正的考察点是离线。把所有操作按时间顺序读进来反过来处理就会发现修改操作之间可以互相抵消用一个双指针扫描就能维护所有答案。这里有个很重要的经验当一道数据结构的题让你觉得必须上“很重的数据结构”时先停一下试着把操作离线化。在线数据结构是万能的兜底方案但竞赛题里十有八九是有更巧妙的性质的。这个“反向扫描”的思路以前也学过但总是记不住在考场上用原因就是平时练习太少靠模板套没真正建立条件反射。3.3 计数题的模数陷阱不是所有逆元都能直接套G题是一道组合计数题现场根本没敢碰因为一看公式就觉得要推半天。补题时照着题解推了一遍发现核心思路是拆成若干个独立计数部分然后用组合数相加。推导过程不算太难真正坑的是模运算的细节。题目给的模数是一个比较大的质数。正常思路是预处理阶乘和逆元但问题在于这个逆元只对非零元素有效。组合计数里经常出现一个中间项可能是模数的倍数这时候直接套逆元会算出错误结果。我第一版代码就是这个错样例碰巧都能过一提交就WA。后来我把预处理范围调整了一下先把所有阶乘和逆元算到n1同时对所有可能为0的分母单独判断才把这个问题绕过去。计数题的另一类陷阱是边界条件。n0、k0、某些组合数的下指标超过上指标这些情况单独考虑往往需要好几行if。我开始没写导致后来对拍数据一多就现原形。现在我的习惯是写计数题之前先在草稿纸上明确所有定义域边界而不是等代码写完再补。4. 没有补完的那道几何题极角排序、扫描线、随机对拍后的选择4.1 第一次尝试极角排序加二分本地自测全都对L题是我这次补题里唯一没有完成的一道也是我最想详细写的一道因为它的失败过程非常有价值。题面涉及平面上若干个点要求判断某种相对关系。我的第一反应是极角排序因为这类几何题八成离不开角度比较。于是我写了一个版本把所有点按极角排序然后用双指针维护一个半平面内点的数量期望通过二分找到边界。写完之后自己随机生成了几千组小规模数据对拍全都正确。那一刻我都准备在补题记录上写AC了然后提交上去WA毫无悬念。问题出在三点第一极角排序时如果要按atan2来排浮点误差在坐标范围很大的时候会被放大第二我在处理“同样角度”的点时没有稳定的次序约定导致双指针边界判断偶尔错位第三某些点在坐标轴上时符号处理容易弄反。对拍数据因为规模小、坐标范围有限这些问题全部被掩盖了。4.2 第二次尝试换用平面扫描从中午写到了天黑第一次失败后我决定换成纯整数的做法不做浮点比较。思路是把所有事件按x坐标排序后用扫描线维护当前点的数量关系。这个方向理论上可以避开极角排序的精度问题但实现起来的细节更多重合点怎么处理、排序相同时要不要特殊处理、扫描线状态怎么在事件点之间切换每一个都是容易错的地方。我花了一整个下午加晚上反复调试测到最多几千个随机数据点最终卡在一种特殊构造上多个点具有相同x坐标并且同时处于边界状态导致维护的计数连续出现偏移。这种情况在代码里非常难用肉眼发现只能通过不断对拍和打表定位。打到晚上十点我承认自己对计算几何的细节掌握确实不够继续硬磕的话后面几天别的题都不用补了。4.3 计算几何的调试方式和我最终的选择这道题让我真正意识到计算几何的调试方式和普通算法题完全不一样。普通题错了大概率是逻辑问题拿几个样例就能看出来。几何题错了经常是浮点误差、边界分类、排序稳定性这些杂七杂八的东西混在一起除非你有系统的对拍脚本加上坐标边界专门加测的方法否则就是在海里捞针。我当时还尝试过把所有浮点比较换成整数比较用叉积和点积的符号确实能规避一部分误差但代码逻辑会变得更复杂而且会引入新的整数溢出问题。最终我选择放弃这道题不补了。有人说12道都补了最后一道就这么扔着不难受吗难受但人要清楚自己的短板在什么地方。计算几何不是三天恶补就能补出来的与其耗在这里不如把省下的时间拿去加强其他题型的熟练度等系统练过计算几何专题再回来收拾它。5. 这场比赛逼我改掉的老毛病5.1 键盘交接的隐性成本以前打训练赛我们三个人经常出现一个场面一个人在写题另一个人想到了另外一道题的正确做法于是口头说了一大堆导致写题的人被迫分心代码写完一提交果然有个地方写错了。区域赛之后我们定了新的规则任何人在别人写题时都不允许开口讨论别的题如果有思路先写在一张纸上等当前提交结束再看。这个规则带来的变化非常直观每个人的平均单次上机时间变短了但提交通过率提高了。因为写题的人不需要一边维护自己思路一边处理队友的信息。键盘交接不是简单的“你下来我上去”而是保证每个人在键盘前拥有完整、不受干扰的专注时间。5.2 被输出格式和读入优化背刺区域赛那天的某个题我们代码逻辑完全正确但第一次提交超时。当时觉得复杂度没问题后来发现是读入用了cin且没有关同步。这个事其实训练里就知道但赛前写模板的时候觉得“又不是大数据量”把那行优化注释掉了结果上来就被数据量教做人。补题的时候我重新整理了一份自己的代码模板开头直接固定写快速读入不考虑“这次数据小可不可以偷懒”因为偷懒一次就会养成习惯。输出格式同样要命。现场困于输出末尾到底要不要多换行、大小写格式等问题我们浪费过不少时间。后来我的习惯是任何输出类问题先把输出样例复制到记事本里然后用肉眼对齐空格和换行再开始写主体逻辑。5.3 训练策略从刷题量切到套题复盘我以前训练就是疯狂刷题按专题刷完就换下一个觉得量够了自然就能拿牌。这次的教训让我彻底改变了方向。区域赛的题并不是比谁见过的套路多而是比在压力下能不能快速识别题型、快速组建解法。这种能力只有通过完整打一场套题然后逐题复盘才能建立。我后来的训练安排变成每周至少一个下午完整打一场套题打完之后当天必须完成所有题目的分类复盘不只是会做的题还要记录不会做的题是因为没见过、还是因为没想透、还是因为心态崩了。这样训练一个月下来效果比单纯刷三个月题要明显得多。5.4 复盘工程化用脚本和表格维护自己的错题本把复盘这件事变成一套可复用的流程是我这次最想推荐的经验。我写了一个简单脚本用组织的训练平台下载比赛数据自动把每次比赛每个题的提交记录、题目类型、现场状态整理成一个HTML报告。报告里除了基本信息还有一个我手动填写的字段如果让我重新思考第一步应该做什么。错题本整理的颗粒度决定了复盘的效率。只写“这道题是XX类型”没有用要写到“这题我卡住是因为没意识到可以离线”“这题下次要先判输入边界”这种级别才是可执行的复盘。到这次区域赛补题结束时我的错题本里已经有几百条这样的记录日常赛前翻一翻相当于把以前的错误变成自己的题库。12/13的补题进度对我来说不是一个缺憾反而是一种提醒。它告诉我大部分题目都能够在赛后通过复盘补回来但也让我认清了自己真正薄弱的环节在哪里。下次如果还有机会在上海这样的赛场上坐五小时我希望不会是坐牢的五个小时。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑