这篇Codeforces考场攻略,精准击中新手、进阶选手常犯的「开场卡基础题慌节奏→中段漏过可解难题→直接拖垮rating涨幅」连锁问题,从防手速焦虑、防卡题心态崩塌两层核心逻辑,预设实用考场思路框架:比如开场先扫题干短、样例贴合经典模型的题切入,不强求更优但严卡细节;设置“3分钟无核心思路暂标记换题”“15分钟攻坚中题无果可补锚定信心的基础题”这类小阈值,助力踩准节奏拿稳应得分数。

对于OIer、ACMer或者单纯想刷算法、玩「电子竞技数学逻辑题」Codeforces(以下简称CF)绝对是绕不开的平台——它节奏快(通常Div.2/Div.3只有2小时)、题型活(不只是模板堆叠)、rating机制透明又***,但很多人刚打CF要么是「ABCDE卡A题」「手速跟不上榜题节奏」,要么是「卡一题慌一小时,连后面会做的都漏了」,今天就把从Div.5新手到偶尔摸个Div.1前排的踩坑+实操经验整理成攻略,帮你稳住心态、卡紧节奏、多冲几百分。


之一部分:赛前24小时到10分钟的「黄金准备」

很多人以为CF只考赛中能力,其实赛前状态调整和工具准备能直接决定前两题甚至三题的手速差——前两题差个10分钟,rating可能差出100分(Div.2前200分都是秒榜/手速分)。

Codeforces考场攻略,别让「手速卡题、心态***」拖垮你的rating涨幅

赛制&题目预估要记牢

CF每场赛前都会在主页面标清楚「题型+目标分对应能做的题量」:

  • Div.5/Div.4:都是入门模板题,目标青/蓝的话,Div.4要保4争5,Div.5全A稳上蓝
  • Div.3:半入门半思维题,最后两题可能是线段树/DP小综合,目标紫的话保5争6
  • Div.2:纯思维题为主,最后一题通常是紫/橙难度的高级算法,目标橙的话保4争5,冲红前40得全前4+快前3
  • Div.1/EDU Round Div.1+Div.2:别硬刚!新手看Div.2部分就行,除非有特别感兴趣的题

工具和环境要锁死

别临时换编辑器!别临时换编译器!别临时换输入法!

  • 推荐编辑器组合:VSCode(配CF插件+一键编译)/CLion(智能补全超爽,新手慎用快捷键不熟会卡)
  • 一键编译脚本(C++选手必备,手敲g++真的慢): 可以在VSCode的tasks.json里写,或者直接桌面存个bat/sh文件,比如Windows的:
    @echo off
    g++ %1 -o %~n1.exe -std=c++17 -O2 -Wall -Wextra -Wshadow -fsanitize=undefined,address -DLOCAL
    %~n1.exe

    (注意最后一行加-DLOCAL,赛中提交要注释掉,调试的时候可以用,比如开freopen("in.txt","r",stdin);读本地样例)

  • 本地样例和草稿纸:桌面新建一个cf_temp文件夹,里面提前放好in.txtout.txt(手敲样例进去别***!有时候网页***会带空格换行问题),草稿纸用大号A4白纸,分栏写每道题的「核心思路+伪代码+边界条件」——伪代码比空想省时间,边界条件写出来能防80%的卡样例

状态调整:轻装上阵,别熬夜背题

  • 赛前24小时别做太难的题!别啃黑紫题啃到吐!可以做2-3道Div.3/Div.4的C/D题找手感
  • 赛前1小时别玩游戏!别刷短视频!可以喝一杯温牛奶,听点轻音乐,或者闭目养神回忆一下常用模板(比如快速幂、二分、前缀和、并查集)
  • 赛前10分钟一定要上厕所!一定要把浏览器全屏!一定要把CF插件打开(Codeforces Enhancer、Codeforces Visualizer这些都可以,能看实时榜、隐藏AC者头像防焦虑)

第二部分:赛中2小时的「节奏卡紧+心态稳赢」

CF赛中最忌讳的就是「死磕一道题」「心态一崩全乱」,严格按照「2+1+1.5」的时间节奏走(Div.2为例,Div.3/Div.4可以调整):

第1步:1-2分钟快速扫题(只看Div.3/2的前5题)

扫题的时候别管后面的高级题!别管题目长度!别管背景!只看「输入输出样例+数据范围」——

  • 数据范围≤1e3:暴力枚举直接上
  • 数据范围≤1e5:二分、前缀和、双指针、贪心
  • 数据范围≤1e18:数学公式、快速幂、矩阵快速幂
  • 数据范围≤1e6:线性筛、DP(滚动数组优化)
  • 样例特别简单但背景复杂:大概率是思维题,别想复杂!比如求平均数、找规律、异或、模运算

第2步:20分钟内必须搞定前两题(Div.3/Div.4可以30分钟)

前两题都是送分题!手速慢的主要原因是「想多了」「手敲错变量名」「边界条件漏了」——

  • 边看样例边写伪代码:比如A题是求三个数的更大值减最小值,伪代码就写「a,b,c输入→max(a,b,c)-min(a,b,c)→输出」
  • 边写代码边加注释(边界条件):比如写循环的时候加个// 注意i从1开始还是0开始,写数组的时候加个// 数组开够1e5+10别溢出
  • 写完立刻测样例!立刻改!别等! 样例全过了立刻提交——别想着「优化一下再交」,优化可以赛后再做,赛中先拿稳分数

第3步:中间题(C/D)给40-60分钟

中间题是拉开差距的关键!如果这时候卡题了怎么办?

  • 先看一眼实时榜! 如果C题有一半人过了,说明是你的思路错了,立刻换一种!如果只有10%的人过了,说明是难题,可以先放一放,做D题试试
  • 写核心函数先测! 比如中间题要用到快速幂,先写个快速幂函数,测一下2^1000 mod 1e9+7对不对,再把快速幂嵌进去
  • 换个角度想问题! 比如正向暴力不行就反向枚举,比如求满足条件的数不行就求不满足条件的数再减
  • 别死磕!最多卡40分钟就跳过! 卡题的时候很容易陷入「死循环」,越想越错,越错越急,跳过之后回来做可能就豁然开朗了

第4步:最后题(E/F)给剩下的30-40分钟(能做就做,不能做别勉强)

最后题通常是高级算法,如果不会就别浪费时间!如果会一点点就写个「部分分代码」——

  • 部分分代码怎么写?看数据范围!比如E题有30%的数据范围≤1e3,就直接写暴力枚举,能拿30分也是分
  • 别乱提交!最后题如果没过样例就别提交,罚时也是扣rating的(虽然CF最后题罚时影响小,但乱提交会浪费时间)

第5步:心态稳赢的3个小技巧

  • 别盯着实时榜的rating变化! 实时榜的rating变化是预估的,不准!盯着只会让你更焦虑
  • 别和队友/朋友比手速! 每个人的节奏不一样,比只会打乱自己的节奏
  • 别放弃!哪怕只剩1分钟! 有时候灵光一闪就能过一道题,哪怕过一道C题,rating也能涨几十

第三部分:赛后24小时的「黄金复盘」

很多人CF打完就关网页,rating掉了就骂平台骂题目,rating涨了就沾沾自喜——这是最浪费时间的做法! 赛后复盘比打10场CF都有用,严格按照「复盘流程」走:

复盘流程1:补题!补题!补题!

补题是提升rating的唯一捷径!补题的时候别直接看题解!

  • 先补自己赛中没做出来的题(C/D/E),再补自己赛中做出来但可以优化的题(A/B)
  • 补题的时候先想「自己赛中为什么没做出来」——是思路错了?是边界条件漏了?是模板不熟?是时间不够?
  • 想出来之后再写代码!别直接抄题解!抄题解只会让你「一看就会,一做就废」
  • 补完题之后要写「题解笔记」——比如用什么算法?有什么边界条件?有什么优化技巧?下次遇到类似的题怎么想?

复盘流程2:看别人的代码!

看别人的代码能学到很多优化技巧和不同的思路——

  • 看榜上前100人的代码!尤其是榜一的代码,通常都是「最简洁、最快速」的
  • 看代码的时候要注意「变量名」「注释」「优化技巧」——比如变量名要简洁明了,注释要加边界条件,优化技巧比如滚动数组、位运算、快速读入

复盘流程3:刷类似的题!

补完题之后要刷几道类似的题巩固一下——

  • 可以用CF的「Tags」功能找类似的题,比如补了一道「双指针」的题,就找10道Tag是「two pointers」的Div.3/Div.4的题来做
  • 也可以用洛谷的「题单」功能找类似的题,比如洛谷有很多「CF Div.2/Div.3题单」

CF只是一个游戏,别太在意rating!

rating只是一个「能力的参考值」,不是「能力的绝对值」!掉分了别灰心,涨分了别骄傲,最重要的是享受解题的过程,提升自己的算法能力

祝大家都能在CF上冲分顺利,早日拿到自己想要的颜色!🎉