1. 从刷题到好题记录我为什么把 Codeforces 当成一座题矿山我入坑 Codeforces 的时间不算早大概在灰名阶段徘徊了大半年每天就是看题解—照着敲—AC—忘掉的循环。直到某天复盘自己的提交记录发现三个月前啃下来的题连题目大意都想不起来更别提里面藏的算法思路。那一刻我才意识到刷题数量毫无意义能留下来的只有好题。所以从某个 Div.2 的周末场开始我给自己立了一条规矩——每场虚拟或正式参赛之后必须挑出至少一道题用专门的方式记录它。这里说的记录不是抄一遍题解而是把这道题为什么难、卡在哪里、哪一步转化最反直觉、以后见到什么特征能联想到它全部写清楚。这套习惯坚持到现在我的记录本里攒了两百多道题其中有 Div.1 的压轴、Div.2 的 F 题也有不少评分只有 1600 但思维特别精巧的题。今天这篇文章就专门聊聊Codeforces 的好题记录到底该怎么选、怎么记、怎么用以及我踩过的那些坑。如果你是刚开始接触 Codeforces 的新手这篇文章能帮你建立一套属于自己的刷题沉淀体系如果你已经掉进刷题多、收获少的泥潭里我相信下面这些思路能让你重新找回做题的乐趣。2. 什么样的题才算好题选题的三个硬标准很多人打开 Problemset看到三千多道题就懵了不知道该做什么。我的个人经验是千万不要按难度数字排序从前到后刷那是效率最低的方式。好题是有特征的我把它们总结成三个标准。2.1 卡住你的地方不在代码而在思维转折点一道题如果只是让你调了两个小时 bug或者因为边界条件错了一发那不叫好题那叫状态不好。真正的好题是那种代码五分钟思路五小时的题。你打开题解看完第一反应往往不是哦原来要这样写而是我为什么没想到这一步。举个例子有一道非常经典的交互式猜数题表面上是个二分但实际上需要你维护一个区间的奇偶性变化。题解代码不足 30 行但那个把询问次数转化为奇偶校验的转折让绝大多数参赛者当场宕机。这种题我遇到一道记一道因为它练的不仅是对算法的熟悉程度更是对问题建模能力的打磨。2.2 覆盖的算法或套路有迁移价值有些题做法很偏只能用在这一道题上那就算解出来也不值得记。而另一些题虽然评分不高但里面的某个思想可以套到五六个场景里这种必须记。我习惯在记录的标签栏里写下这道题拆出来的可复用套路比如区间问题考虑贡献拆分为两个前缀的差、异或问题先想 Trie 和线性基的关系、构造问题从最简状态开始扩展等等。每次做题遇到有点眼熟的套路但一时想不起来细节时我就会回去翻记录那感觉就像把以前的自己叫来当助教很神奇。2.3 错的时候有意外感意外感是我评价好题的最直觉指标。如果一道题你很快想到解法然后顺利 AC那除非它用了某个你还不太熟的高级算法否则我一般不会记录。但如果我做错了一道题看完题解发现我的方向完全反了或者我遗漏了一个极其隐蔽的边界那道题给我带来的认知冲击越强我就越要去记录它。这种题往往是水平提升最快的跳板因为意外感意味着你原有的思维方式在这个场景下失效了记录它的过程就是修补盲区的过程。3. 我的记录模板不抄题解只抄决策树好现在我们确定了哪几类题应该记接下来聊怎么记。我见过很多人的笔记本说白了就是题解 PDF 的扫描版把官方 editorial 从英文翻译成中文抄一遍图论建模再复制几个代码片段。这种记录说实话除了感动自己以外没有作用。因为知识的存储需要和提取的线索绑定你记的时候没有留下自己的思考决策路径看的时候自然就想不起来当时卡住的场景。我的模板经历了多次迭代现在固定为五个区块每个区块都有它存在的理由。3.1 题目标签与难度锚点第一行我会写题目编号、难度评分、涉及的算法标签以及我是以什么身份遇到它的是正常参赛、虚拟参赛还是补题。难度评分锚点很重要因为它能让我清楚知道这道题对当时的我来说处于哪个能力区间。如果一个 1800 的题我比赛时能独立做出来说明我的 problem solving 水平差不多到那了如果补题才看懂说明至少还差一个身位。3.2 我当时的思路残影这是整个记录里最不美观但最有价值的部分。我会用两三句话诚实地写下我比赛时的错误思路例如我先把区间按左端点排序然后尝试贪心地合并但样例 3 过不了或者我想了个 DPdp[i][j] 表示走到第 i 个点剩余体力为 j 的最优解但转移是 O(n^3)优化不动了。为什么非要写残影因为人的记忆是依附状态的。你看到错误思路四个字脑子里会自动代入当时的挫败感这条记忆通道就被重新打开了。之后再回忆这道题的解法时你是从一个具体的岔路口起步而不是从一片空白起步。3.3 正确的决策链决策链不是题解的步骤复述而是为什么在某个时刻要做什么选择。我一般用一个箭头链条表示例如观察到 ai 范围只有 5000远小于 n所以值域方向可做文章因为要求最长上升子序列且记录以某个值为结尾的最优状态所以考虑按值域 DP转移时尝试前一个值全部而非前一个位置复杂度就从 O(n²) 降下来了这串链条每一条之间都有因果关系。写决策链的时候我会刻意让自己想一个问题如果我把某一步的为什么去掉只留做什么那我三个月后还能看懂吗不能所以每步必须带理由。3.4 边界与反例收集一道好题往往有一两个让所有人翻车的 corner case。我会在记录末尾准备一个表格列三列边界情况、错误表现、正确姿势。比如除法向下取整时负数的问题、二分端点 1/-1 的问题、多重集去重问题这些细节是赛场上最耗费时间的地方值得为它们单独开一个板块。3.5 同题型的横向发散记录的最后一步我会把这道题和同一个根节点下的其他题目连起来。可以用一句话也可以贴链接。比如这题的思路类似于某场 Div.3 的 C 题那题是把值域压缩成状态这题是直接开数组还可以扩展为带权值的情况那就需要用线段树维护。这步的目的是让记录从点连成网以后看到一个标签就能浮现一串题。4. 一道让我记忆犹新的好题CF 1811G2 的数位 DP 与异或碰撞光说理论容易飘我拿一道我记录过的题具体拆解一遍大家看看上面这套模板实际写出来是什么样。这道题当时花了我一个下午期间翻了好几个题解版本才彻底通透。题目名称Codeforces Round 1811 的 G2 题关于一个序列中若干个子段异或和为某个给定值的计数问题。原题的具体描述是给定一个数组 a问有多少种方式选择若干对不重叠的相邻元素使得这些元素的异或和等于某个目标值。其实这个描述不太准确官方题意是给你一个数组你需要把它划分成若干个长度至少为 2 的连续段每个段的异或和必须等于一个固定值求划分方案数。我当时的错误思路是设 dp[i] 表示前 i 个元素的合法划分数量然后枚举上一段的起点 j判断区间异或和是否满足条件。这个转移在时间复杂度上是指数级别的因为 j 的候选范围太大。我甚至一度想用区间异或预处理前缀异或数组优化判断但转移的循环仍然不可控。后来看了题解才明白问题的关键在于异或前缀和具有一个重要性质两个点的前缀异或值相等意味着它们之间的区间异或为 0注意这里我们需要的是异或等于 K所以从值域方向切割反而更优。把 dp 的状态定义改成以某个前缀异或值为分类标准的 DP通过哈希表维护当前异或值对应的 dp 累加和就可以把复杂度压到 O(n)。这个题的决策链我写得很详细第一步前缀异或数组 p[i]a1 xor a2 ... xor ai区间 [l,r] 异或等于 K 等价于 p[r] xor p[l-1] K这是异或运算中最基础也最容易被忘记的转化第二步转移需要知道上一段的异或值与其枚举端点不如枚举 p 值因为 p 值范围受数组值域约束第三步用一个 map 或者数组维护每种 p 值当前的 dp 总和碰到满足 xor 关系的 p 值就累加第四步最后答案源自所有符合异或关系的状态值的组合这道题我踩的坑特别典型我一开始把题理解成了每个段至少包含两个元素但实际上题目只是要求划分后每个段内部被选择元素别重复真正复杂的地方在于异或前缀如何在多次划分中出现相等的值。如果不把 p 值明确写出来dp 方程根本推不动。把这道题放进我的记录模板后我后来又找到了三道类似思想的题都是用值域状态压缩转移来源的类型。这种横向迁移的效果是立竿见影的因为同一套思维模式被重复强化了好几遍。5. 记录之后要做的三件事回顾、检索、重做好题记录下来只是第一步如果不回头用记录就变成了收藏夹里的吃灰文件。我的经验是记录的生命周期包含三个阶段任何一个阶段断了这套体系就白建了。5.1 每周末一次的回顾扫描我会在每个周六的下午不看解题过程只看题目标签和难度锚点快速在脑海中还原每道题的决策链。如果某道题的决策链想起来断断续续我就把这道题标记为待重做。这个过程类似于语言学习里的艾宾浩斯遗忘曲线复习只不过复习的对象是问题解决策略不是具体知识点。你会发现隔一周后能清晰回忆起来的题才是真正内化的题回忆不起来的那些说明当初理解得不够狠或者记录得不够具体需要重新推演一遍。5.2 按标签创建自动索引我用的是一个本地笔记软件标签体系非常关键。我的标签分为三个层级算法大类如 DP、贪心、图论、问题特征如区间贡献拆分值域压缩、题目来源如 Div.2、Div.3、Educational 轮次。为什么要这么分层因为当你遇到新题卡住时检索方式通常是这个题看起来像 XX 类型这时你能直接跳到那个特征标签把过往的同类型思路全部调出来。如果你只是按算法大类分那 DP 下面几百条记录会把人淹死。特征级标签才是真正的钩子。5.3 两个月后的黑盒重做这个方法帮我在去年完成了一个小飞跃。我会挑一个周末把两个月前记录的好题全部清空笔记打开一道题只看题目原文按自己的思路从零做一遍。做不出来的题再把笔记打开这时你会非常清楚地看到是哪一个环节断了是建模没想起来还是某个转化没想到还是代码实现有细节遗漏。黑盒重做是最残酷的检验方式但也是记录系统里最有价值的一环。因为做题能力最终体现在你面对一道新题时能独立调用多少旧经验而旧经验如果只存在于文字里不到你的脑海里能力就不算长在你身上。6. 关于 Codeforces 实时 Rating 变化的工具食用指南顺带提一个不少朋友都问过我的问题看 Codeforces 的实时 Rating 变化插件到底有没有用我的答案是对刷题习惯的反馈非常有帮助但别被它绑架。我目前常用的插件主要在浏览器端它能在比赛期间显示当前预估排名和 rating 变化的实时曲线。这类工具的原理是根据当前榜单中的通过题数、罚时、提交错误次数匹配历史同分数段选手的最终排名来计算一个动态的预估分数变化。说实话它不是一个绝对精确的东西因为每场比赛的选手分布和难度差异都会影响最终结果但它提供了一种正在逼近结果的刺激感能让你更认真对待每一发提交。我建议的食用方式是比赛刚开始时不要盯着插件看等自己在某个题卡住超过二十分钟时再打开看一眼当前的情况判断自己是不是需要冒险提交一发比如不确定边界条件但罚时还有余量。插件显示的当前排名区间可以和目标 AC 题数配合使用帮助你做出理性的博弈决策。不过我有两个血泪教训其一插件显示的变化曲线是实时反推的并不是结算后的官方 rating 变化。比赛结束前半个小时榜单变化非常剧烈这时候看曲线容易焦虑我曾在最后一小时因为看到自己 rating 预估掉了 30 分而心态崩了连暴力都写挂了一发。后来我养成了习惯每场最后二十分钟关掉插件只看题面。其二插件的数据缓存有延迟。如果你反复刷新页面可能看到几个不同版本的预估这并不代表你被系统制裁了而只是数据更新的粒度差异。不用为这种波动烦恼。总的来说这类工具适合把 CF 当成认真竞技项目的玩家如果你纯当娱乐休闲那不如把浏览器界面开成简洁模式屏蔽一切数字媒介让自己安心沉浸在做题本身里。7. 实操心得我最想叮嘱新手的四件事最后把一个老兵的经验浓缩成几句话你直接拿去用能少走很多弯路。第一从 Div.3 和 Div.2 的题开始记录别碰 Div.1 的 E、F 题。我知道很多新人喜欢挑战难题然后记笔记觉得自己很努力但说实话难度过高的题你连决策链都写不清楚抄下来也是天书。我的建议是从你刚好需要一点时间才能想明白的题开始记录那种题最适合形成高质量笔记。评分在 1600 到 2000 之间的题是记录价值密度最大的区间。第二记录格式不必追求美观效率优先。我用过的工具有 Notion、Typora、Obsidian甚至有一段用 Git 仓库管理 Markdown 文件。说实话工具都是次要的你要的是快速捕捉决策链让记录真正动起来。只要你的方案支持标签跳转、全文搜索、本地备份就够用了。第三题目数量比刷题量重要太多。我见过比较夸张的刷题狂魔每天三四道但笔记里总是同一句这道题用 DP 做状态转移很经典——这种记录一页都嫌多。记录一道题的时间应该不少于做题时间的一半因为读懂题解只是最低要求把它拆成自己的语言才是真内化。第四允许自己返工。我经常在重读旧笔记时发现当时写的决策链有逻辑漏洞或者代码实现还可以优化。这时候我会直接在原笔记上更新保留一个历史版本标签不用羞愧自己被过去打败了。相反能看到过去的漏洞是进步最直观的证据。8. 结语好题记录是一种讲究节奏的修行做 Codeforces 好题记录这件事本质上不是收藏而是建立私人题库和思维索引。你记录的每一道题都是一次和自己思维偏误的对话。坚持几个月以后你会发现自己面对新题时的直觉变得非常敏锐因为那些曾经让你摔跤的坑都变成了一条条带标记的路标。如果你现在还在纠结每天做多少题不如先停下来问自己上一道让我卡到崩溃的题我还能说出来它的核心决策链吗如果说不出来那大概率是刷得太快、记得太少。改变方式并不复杂从今晚的题目开始用我上面说的五个区块写出一条笔记试试。质量远胜数量这句话在 Codeforces 里尤其成立。
企业数字化 ERP 产品动态
相关推荐
自研RISC-V核移植RT-Thread:从上下文切换到中断调试的完整实践 说实话,在ysyx学到CPU能跑通乘法器和简单的裸机程序之后,下一件最“提神”的事,就是给它移植一个真正的RTOS。我最后选的是RT-Thread,不只是因为中文资料相对友好,更因为它内核体积小、代码路径足够清晰,自… · 2026/9/26 6:56:16
GPT-6 Astra 方向下最核心的10家公司与语言控制3D打印实操 1. 从标题拆解:GPT-6 Astra 到底在说什么先把话说在前头,标题里这个“GPT-6 Astra”,目前并不是一个已经正式对外发布的消费级产品名称,它更像是一个在技术圈、创投圈和硬件圈同时流传的“代号级概念”。我翻了一圈公开信息&#… · 2026/9/26 6:56:10
Univer嵌入式表格引擎集成实践:从渲染器到协同编辑 前阵子公司要在一个内部数据产品里嵌入一套可编辑的表格能力,需求听起来很简单——用户能像操作 Excel 一样改单元格、公式能算、数据能回存,但真正调研起来才发现,网页里想给人一套“不违和的表格”远比想象中复杂,也就是从这个时… · 2026/9/26 7:26:34
企业级Agent异步并发实战:async/await与数据库锁避坑指南 1. 企业级 Agent 的异步与并发,到底难在哪里做企业级 agent 项目,绕不开的一个话题就是异步和并发。我最早接触这块是在一个内部工单自动处理系统上,当时觉得 agent 嘛,无非就是调模型、拿结果、写回数据库,能有多复杂… · 2026/9/26 7:26:34
Handsontable自定义select单元格:轻松实现下拉单选与多选 在后台管理系统里做表格编辑,Handsontable 一直是我用得比较顺手的方案。前段时间接了一个需求:一张员工信息维护表里,部门列要用下拉单选,标签列要支持下拉多选。Handsontable 自带的 dropdown 单元格类型只能单选,硬… · 2026/9/26 7:26:34
WorkBuddy技能落地率低?10个高效技能与避坑指南 1. 为什么 WorkBuddy 类工具的技能落地率普遍偏低我见过太多人把 WorkBuddy 这类智能协作助手装进工作流之后,用了不到两周就把它晾在一边。不是工具不行,而是绝大多数人从一开始就搞错了使用姿势——他们把 WorkBuddy 当成一个“更聪明的搜索框”&#… · 2026/9/26 7:26:34
AI视频流水线:从工具到端到端生产流程的实战构建 1. 这不是“又一个AI视频工具测评”,而是行业流水线正在重构的实录2026年,当你在短视频后台看到一条“客户定制需求:300条地域化方言口播视频,48小时内交付”,你第一反应不再是找剪辑师排期、不是催文案改稿、甚至不是… · 2026/9/26 7:26:28
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46