1. 先说说周赛Q1~Q2的定位:它才是上分的基本盘
很多人打周赛盯着Q4那种压轴题下功夫,觉得Q1Q2太简单,不值得花时间研究。我从第430场周赛一路打到现在第495场,最真实的感受是:真正决定你能不能上分、能不能稳定保分的,恰恰是前两题。Q4可能一场比赛只有几百人能AK,但Q1Q2是面向所有人的送分题,你在这两题上浪费了半小时,后面连看Q3的机会都没有。
我见过太多这样的朋友:打开周赛页面,Q1读题两分钟就写完了,结果一提交WA,又回头改,来回折腾十分钟才AC;Q2一看是个带点思维量的题,立刻慌了,暴力写完超时,再想优化又想不出来,心态直接崩了。说白了,Q1Q2拼的不是你会不会写代码,而是你能不能在最短时间内稳定AC。这一篇我不讲虚的,就把第495场周赛Q1~Q2这类题型的“快速识别+秒杀套路”掰开了讲,顺便复盘一下从读题到AC的时间线应该怎么控制。
这篇文章适合谁?适合刚接触周赛、想从Q1Q2开始建立信心的选手,也适合已经能稳定做出来、但总在细节上翻车的老手。内容不涉及什么高深算法,但每一条都是我踩过坑之后总结出来的。
回头聊第495场周赛。那场题目一出来,我扫了一眼Q1Q2,第一反应是“这俩题考的东西太典型了”,典型到我甚至能预判大部分人会在哪里卡壳。后面我会拿这两题当引子,拆解同类型题目的通用解法,你把这套思路吃透了,以后不管哪一场周赛,Q1Q2都不会成为你的绊脚石。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Q1的核心破题思路:读题快、代码短,靠的是类型直觉
2.1 先判断它是模拟、计数还是数学
Q1有一个非常明显的特点:它考察的不是你算法多强,而是你读题和写代码的基本功。第495场的Q1,以及绝大多数周赛的Q1,基本逃不出三类:纯模拟、哈希计数、简单数学。
纯模拟的题,特征是最明显的——题目会给你一个操作步骤,你照做就行,比如“按顺序处理数组”“重复某个操作直到满足条件”。这种题没有技术含量,唯一的坑是:操作步骤里的边界条件。比如题目说“当剩余数量小于等于某个值时停止”,有的人写while循环就忘了加这个退出条件,或者用for循环直接把条件写死,边界一错就WA。
哈希计数的题,特征是“给你一串数据,让你统计某种东西出现的次数、频率,或者找出现次数最多的元素”。第495场这类题很容易出现,因为它能考你对哈希表的熟练度,又不至于难倒新手。遇到这种题,第一时间别想什么高级结构,直接上unordered_map或Counter,O(1)插入和查询,代码量短,出错概率低。
简单数学题,特征是你一眼能看出它有规律,比如奇偶性判断、取模运算、最大公约数、最小公倍数。这种题不怕你想不到数学公式,怕的是你想太多。有次我打一场周赛,Q1是让判断一个数能否拆成两个偶数的和,当时我第一反应是列个方程,结果写了五行代码,后来发现只需要判断这个数是不是偶数、且不等于2就行,两行代码搞定。Q1的数学题一般不会超过这个难度,你如果开始往数论方向想了,大概率是想偏了。
2.2 第495场Q1的实战复盘:拿到题先干这三件事
第495场的Q1,我当时上手就干了三件事,你可以直接抄作业:
第一步,快速扫描输入输出格式。先看输入是什么、输出要求什么,再去看题目描述,这个顺序能帮你过滤掉大量无关信息。
第二步,在草稿纸上走一遍示例。拿题目的第一个示例手算一遍,确认你理解的过程和题目一致。这一步很多人跳过,但我推荐你做,因为Q1的示例往往就包含了一个边界case,你走一遍能提前发现问题。
第三步,直接写最简单的实现。Q1不要追求什么时间复杂度优化,O(n)已经是天花板,再往下没有意义。你只需要保证代码简单、不出错,AC就是胜利。
拿第495场Q1来说,它本质上就是一道计数+判断的题,核心做法就是开一个数组或哈希表统计次数,然后按照题目的条件判断。很多人在这种题上卡住,不是不会做,是总想着“这个题会不会有坑”,越想越复杂。我给你的建议是:Q1的题,你按最容易想到的思路写,写完了再回头检查边界,而不是一开始就给自己加戏。
2.3 Q1秒杀级别的代码模板
下面这两个模板,基本覆盖了Q1最常见的两类题。第一个是计数模板,处理“统计出现次数”类:
python复制from collections import Counter
def solve(arr):
cnt = Counter(arr)
# 按题目要求遍历或判断
for k, v in cnt.items():
if 条件:
return ...
return -1
第二个是模拟模板,处理“按步骤操作”类:
python复制def solve(n):
ans = 0
while n > 1:
# 按题目规则执行操作
if n % 2 == 0:
n //= 2
else:
n -= 1
ans += 1
return ans
这两个模板看着简单,但你要练到闭着眼睛都能写出来。周赛的Q1考察的就是这种肌肉记忆,如果你连模板都要现场想,时间上就输了一半。
3. Q2的难度跃迁:从“能通”到“会写”的思维转换
3.1 第495场Q2的题型定位:带点思维量的简单题
Q2和Q1最大的区别是:Q1只要你肯写,基本都能过;Q2开始筛选人了。它不会考什么线段树、树状数组这些进阶数据结构,但会考你能不能从题目描述中抽象出正确的解法。第495场的Q2,如果我没记错的话,是那种“看着像暴力,但暴力会超时,需要一个小优化”的题。这类题在周赛中特别多,我把它们统称为“小思维题”。
怎么识别小思维题?看数据范围。如果输入规模是10^5级别,那O(n^2)的暴力肯定是超时的,你就该考虑O(n log n)或O(n)的解法。如果数据范围只有10^3,那暴力说不定能过,但更稳妥的做法还是用双指针或前缀和优化。
拿第495场Q2举例,它考察的是贪心+排序,这种组合在Q2中出现的频率极高。题目大概意思是给你一个数组,让你通过某种操作获得最大收益,如果你先把数组排序,然后从小到大或从大到小逐个处理,复杂度立刻从O(n^2)降到了O(n log n)。思路不复杂,但很多人没想到排序这一步,就硬着头皮暴力,最后超时。
3.2 贪心题的快速识别与证明技巧
在Q2里,贪心题几乎是最常见的一类。它的识别特征有三个:一是题目里出现“最多”“最少”“最大”“最小”;二是你直觉上觉得“每次选当前最优的就行”;三是数据范围在10^5级别,暗示你O(n log n)可以过。
识别出来之后,最关键的是验证贪心策略的正确性。很多人在这一步翻车,想到一个贪心策略就赶紧写,结果WA。我建议你用“交换论证法”在脑海里快速验证:假设有两个相邻的元素a和b,如果交换它们的处理顺序,结果会变差还是变好?如果无论a和b是什么顺序,当前策略都最优,那它就是正确的贪心。
举个例子,常见的“会议室安排最大数量”问题,贪心策略是“按结束时间最早排序”。为什么?因为结束时间早的会议能让后面留下更多空间,这就是交换论证的结果。Q2的贪心题几乎都是这个套路,你只要把“排序的key”想清楚,代码就是十几行的事。
第495场的Q2我记得就是这种套路:先排序,再按某个规则累加。你如果事先练过这些经典贪心模型(选区间、调度、分组),做起来真的不费脑子。
3.3 前缀和、差分的常用场景:区间的无脑解
Q2的另一大类是前缀和/差分。这俩知识点说难不难,但很多人到用的时候想不起来,非要写个双重循环去求区间和,白白超时。
前缀和的适用场景非常明显:题目涉及多次区间求和。如果一次给你一个数组,后面有若干次询问,每次问[l, r]的和是多少,你直接用前缀和,预处理O(n),每次查询O(1)。
差分的适用场景也很有辨识度:题目要求对数组的某个区间整体加上或减去一个值,操作很多次,最后再输出整个数组。这种题你如果每次都对区间内元素逐个修改,复杂度是O(n*m),数据一大就炸;用差分数组,每次修改只动两个位置,最后求一次前缀和还原,复杂度降为O(n+m)。
第495场的Q2或类似场次里,前缀和的变体很常见,比如“求所有子数组的和”“求满足条件的子数组数量”。我建议你写一个固定的前缀和模板放在本地,周赛直接调用:
python复制def prefix_sum(arr):
n = len(arr)
pre = [0] * (n + 1)
for i in range(n):
pre[i + 1] = pre[i] + arr[i]
return pre
注意这里pre[i]表示前i个元素的和,pre[r] - pre[l]就是[l, r)区间的和。这个模板我用了一百多场周赛,从未出错。
4. 现场实操:第495场周赛Q1~Q2的时间线复盘
4.1 前20分钟怎么打:读题、动笔、AC的节奏
周赛一开打,前20分钟是黄金时间。这个阶段的目标只有一个:在15分钟之内把Q1做掉,剩下5分钟开始读Q2。
我复盘一下第495场的前20分钟是这样的:
- 0~2分钟:打开题目列表,直接看Q1,快速扫输入输出格式和示例。
- 2~5分钟:确认题目属于计数类,用Counter统计了一下,写了一个简单的判断,提交,AC。
- 5~15分钟:读Q2,第一遍没完全看懂,又读了一遍。确认是贪心+排序之后,在草稿纸上推演了示例,确认思路可行,开始写代码。
- 15~20分钟:写完Q2,提交发现WA,检查了一下发现是排序方向反了,改完之后AC。
你可能会觉得“你这也太顺利了”,但说实话,这个顺利是因为我对Q1Q2的题型太熟悉了。如果你还在Q1上纠结,大概率是读题方式有问题。我的经验是:Q1的题,读两遍还不动笔,就说明你在过度思考,先按最朴素的思路写一版,哪怕不是最优,提交一次看看反馈也比空想强。
4.2 遇到卡题时怎么办:3分钟冷静法则
不是每一场Q2都能秒掉的。第495场也算走运,但后面还有更多场次的Q2卡我很久。我分享一个“3分钟冷静法则”,已经在很多场周赛里救过我:
- 如果读完题1分钟没有任何思路,不要盯着发呆,先去写一个暴力解法,哪怕它超时。
- 暴力解法写完,运行一遍确认它逻辑正确,然后分析瓶颈在哪。超时通常意味着瓶颈在循环次数,你能不能通过预处理、排序、双指针减少循环次数?
- 想不出来,3分钟一到就跳过,先去看Q3。Q2的分数先放下,Q3如果更容易拿分,就先做Q3,回来再做Q2。
很多人卡在Q2上死磕,一磕就是半小时,结果Q3Q4连题目都没看。这是周赛的大忌。你要清楚:周赛比的是总分,不是比谁把某道题AC了。第495场Q2我虽然AC了,但我也遇到过做不出来的时候,先跳,再回头,往往思路就通了。
4.3 提交前1分钟的终极检查清单
不管你Q1Q2写得多么顺手,提交之前一定要花一分钟过一遍这个清单。我把第495场的一个小坑就栽在这种地方,差点WA:
- 数据范围有没有看错? 10^5的数组,你的count数组开没开到10^5+5?
- int够不够,要不要用long long? 求和类的题,累加起来很可能溢出,C++选手尤其要注意。
- 边界case测了吗? 数组长度为1、最大极限输入、空输入,这三个都要在脑海里过一遍。
- 排序方向对吗? 升序还是降序,你在代码里写的和题意一致吗?
- 输出格式对了没? 该换行没换行、该空格没空格,都是丢分点。
这个清单我打印出来贴显示器边上,每次提交前快速过一遍。别看它简单,它能帮你拦住至少一半的无效提交。周赛的罚时是按次数的,WA一次就多5分钟罚时,AC速度相同的情况下,罚时少的人排名更高。稳一点,比快一点更重要。
5. Q1~Q2训练避坑指南:从实战中提炼的教训
5.1 三大WA原因与排查方向
结合第495场以及我打过的几十场周赛,我总结出Q1Q2最常见的三种WA原因,你可以对照排查:
第一种,边界条件处理错误。这是Q1的重灾区。题目说“当数组长度为0时返回-1”,结果你直接访问arr[0],报错或WA。解决办法就是提交前头脑里过一遍边界case,这个习惯必须养成。
第二种,数据类型溢出。在C++或Java中尤其常见。两个10^9量级的数相加,int直接溢出成负数,你拿负数和答案比较,自然WA。解决方案是:涉及加法、乘法的地方,一律用long long。
第三种,读题理解偏差。题目说的是“子数组”,你看成了“子序列”;题目说“最多操作k次”,你当成了“恰好操作k次”。这种错误最冤,也是我最常犯的。解决办法是:把题目里的限制条件划出来,在代码注释里写一遍再动手。
5.2 赛后复盘的正确姿势:别只盯着题解
一场周赛打完,很多人的“复盘”就是打开题解,抄一遍别人的代码,然后关掉。这样做的效果几乎为零。我推荐的复盘流程是这个:
- 先不看题解,自己把WA的题重新做一遍,记录用时。
- 如果这次能AC,说明你当时是心态或状态问题;如果还是AC不了,再去看题解。
- 看题解之后,用一句话总结这道题的核心套路,写进你的笔记里。比如“凡是求区间和的题,优先考虑前缀和”“凡是求最大最小且数据范围大的题,优先考虑贪心”。
- 最后,把这道题加进你的“周赛错题本”,下次周赛前翻一遍。
我从第430场周赛开始坚持这样做,到第495场,错题本里积累了上百道题。每次周赛前不刷新题,只翻错题本,效果比刷十道新题都好。
5.3 日常训练的量化目标
最后说点训练建议。如果你是想认真提升周赛成绩,平时训练不能只“刷题”,得有量化目标。我是这样安排的:
- 每天至少1道简单题+1道中等题,简单题限时5分钟,中等题限时20分钟,模拟周赛的节奏。
- 每周完整参加一次周赛,无论状态好坏都必须参加。周赛的紧张感和平时刻意练习完全不同,这种“高压环境下的解题能力”需要靠真实比赛训练。
- 每次周赛结束,记录自己Q1Q2的AC用时。目标是在第500场周赛之前,把Q1压到5分钟内、Q2压到15分钟内。
我之前从第430场开始,Q1能稳定在5分钟内AC,Q2时快时慢,后面刻意练了一个月的“快速识别题型”,Q2也稳定在了15分钟以内。第495场Q1Q2加起来不到20分钟,排名直接冲到了生涯新高。这个成绩不算厉害,但对我来说,已经验证了这套训练方法是有效的。
6. 最后分享一个关于Q1~Q2的心态技巧
从我个人的参赛体验来看,打周赛最怕的不是题做不出来,而是前两题不顺导致的连锁反应。Q1WA一次,你心里开始慌,觉得排名完了,然后Q2写得更保守、更犹豫,反而更容易错。
第495场我也有过一次小波动:Q2第一次提交WA的时候,我没有立刻改代码,而是深吸一口气,先看了一眼输出和预期输出差在哪,发现自己把排序方向写反了,其实是心态一慌手滑了。改完提交AC之后,后面就顺了。
所以我想说,前两题做得快、做得稳,有很大一部分是心态的功劳。你平时刷题时就要有“我一定能AC”的暗示,而不是“这道题好难我可能做不出来”。把自己当成一个熟练工,第一题读完就动手,第二题识别出套路就写,遇到卡顿就冷静分析,这样你的周赛成绩一定会往上走一截。
