死磕一道蓝题三小时,从毫无思路到一键 A
2026-01-30 22:13:08
发布于:广东
三小时死磕一道蓝题:从“这题是人做的?”到AC的狂喜
凌晨一点的书桌,屏幕亮得刺眼。ACGO的题库界面停留在一道蓝题上,标题旁的“难度:中等”像个嘲讽的笑脸。我盯着题目看了五分钟,脑子里只有四个大字:毫无思路。
本来只是想睡前刷道题放松下,哪成想,这一“放松”,就是三个小时。
这道题的题干不算长,大概是个区间查询的变种问题,要求在一堆杂乱的数据里,快速找出满足特定条件的子区间数量。起初我还挺轻敌,蓝题嘛,无非就是暴力优化一下,或者套个常见的算法模板。
我随手敲了个暴力枚举的代码,两层循环遍历所有区间,逻辑简单粗暴。点击提交,不出意外,TLE——时间超限。毕竟数据范围是1e5,暴力的O(n²)复杂度,跑断腿也过不了。
行,暴力不行就换思路。我翻出草稿纸,开始画样例的示意图。把数据一个个标上去,试图找出点规律。十分钟,二十分钟,草稿纸上画满了歪歪扭扭的线段和数字,还是一头雾水。我又试着把样例的答案拆解,反推每一步的计算逻辑,可总在某个节点卡住,前后矛盾。
“这题到底要考啥啊?”我抓了抓头发,有点烦躁。打开算法笔记,把滑动窗口、前缀和、单调栈这些可能相关的知识点翻了个遍,挨个往题目上套。套滑动窗口,发现条件不满足单调性;套前缀和,又不知道怎么转化问题。提交了两次修改版的代码,一次WA(答案错误),一次RE(运行错误)。
屏幕上的“提交失败”红得扎眼,我甚至开始怀疑:是不是我理解错题了?
我强迫自己关掉代码编辑器,站起身去接了杯水。冷水泼在脸上,脑子清醒了点。回到座位,我没有急着敲代码,而是逐字逐句重读题干,把每一个条件都圈出来。“区间和”“最小值”“数量统计”……等等,区间和与最小值的结合?我猛地想起之前看过的一道类似题目,好像用到了单调栈+贡献法——计算每个元素作为最小值时,能贡献的合法区间数量。
对!就是这个方向!
我瞬间来了精神,重新在草稿纸上梳理逻辑:先用单调栈找出每个元素左边和右边第一个比它小的元素位置,确定它作为最小值的区间边界;再结合前缀和快速计算区间和,判断是否满足题目要求。思路一旦通了,后面的步骤就顺理成章了。
我手指飞快地敲着键盘,定义数组、处理边界、维护单调栈、计算贡献……代码写得很顺,二十分钟就完成了初稿。这一次,我没有急着提交,而是自己造了几组数据测试,包括边界情况和极端数据。测试用例都过了,我心里有点小窃喜,但还是不敢掉以轻心——毕竟竞赛里,坑往往藏在细节里。
我又检查了一遍代码,果然发现了问题:计算区间和的时候,数据可能会溢出,忘记开long long了。“不开long long见祖宗”,这句竞赛圈的老话果然没说错。赶紧修改,把所有涉及求和的变量都改成long long类型。
深吸一口气,点击“提交”。
眼睛死死盯着屏幕上的加载进度条,一秒,两秒……当那个绿色的、带着金光的AC跳出来的时候,我差点叫出声。
凌晨四点零三分,距离我点开这道题,正好三个小时。
我瘫在椅子上,看着屏幕上的“通过所有测试点”,突然觉得刚才的烦躁、焦虑、挫败,都变成了一种难以言喻的快乐。这种快乐,不是刷水题时的轻松惬意,而是死磕到底后,拨云见日的酣畅淋漓。
其实竞赛刷题就是这样吧。没有谁是天生的神犇,不过是一道题一道题熬出来的。那些卡题的深夜,那些草稿纸上的涂鸦,那些一次次的提交失败,都是通往AC的必经之路。
关掉电脑的时候,窗外已经泛起了鱼肚白。我躺在床上,脑子里还在回放那道题的思路,嘴角却忍不住上扬。
明天,再去ACGO上挑一道蓝题?
全部评论 1
我瘫在椅子上,看着屏幕上的“通过所有测试点”,突然觉得刚才的烦躁、焦虑、挫败,都变成了一种难以言喻的快乐。这种快乐,不是刷水题时的轻松惬意,而是死磕到底后,拨云见日的酣畅淋漓。
其实竞赛刷题就是这样吧。没有谁是天生的神犇,不过是一道题一道题熬出来的。那些卡题的深夜,那些草稿纸上的涂鸦,那些一次次的提交失败,都是通往AC的必经之路。
7小时前 来自 广东
0
















有帮助,赞一个