liangdl 的博客

记录、分享与探索

最大的收获可能是打模拟赛的方法,稳定了心态;其次就是决定了停课事宜,规划了大致的训练方法;以及战胜心魔,敢于私信大佬了。

专题的话,搞了 DP、反悔贪心、图论建模相关、数论相关,训练了一些思维。

OI 是一个很难看出进步的学科,往往需要成年累月的积累,所以做不出难题也不要灰心啦。

刷题指标是达到了的,收获也很大吧,没有颓过去。只是说稳切青这个目标本身不太现实(逃

感觉这一个月里变了挺多的,刷题策略变了,模拟赛心态变了,目标变了,对自己的定位也变了。

希望 9 月份也能比八月份更加努力吧,具体的计划还没做好,要等老师回复我咯。

加油!

这几天处理了停课训练的事情,终于在今天处理妥当了。

事情的起因是在 8.26 阅读了 YeahPotato 的博客,看到他在初一就停课,心里便生出了一个大胆的念头。

由于是晚上看的博客,睡前一直在想这件事情,想的实在是受不了了,答应自己明天一定认真处理这个念头,然后才安然入眠。

27 号一早就去 u 群里问了群友的意见,搜了些资料,发现初中生停课挺普遍的。自己做了个预估,发现如果停课的话,进省队还真有希望。

于是立马动手做了个 PPT,晚上等爸妈回来就和他们说了,他们感觉没有反对的意思,让我考虑好,可以的话就支持我。

睡前在 u 群问了问停课之后的训练方法。又是一夜难眠。

28 号睡得很晚,下午还要去宝中上课,晚上把 PPT 和保证书写了,一切资料备齐了。

又是一夜难眠。感觉非常激动,自己的前途貌似异常光明,终于要成为一名真正的 OIer 了吗 —— 现在看来是有些乐观了。

29 号早晨把资料给班主任看了,晚上家长会开完之后和班主任聊了一下,感觉她是支持的,只不过要我考虑好。

意外的睡得很好。

30 号这一天就是到处托关系找机构,实际上我在这个时候完全没有搞懂应该怎么训练,找老师也是瞎找的,自然失败了。

31 号这一天早晨去学校报告,结束的时候和班主任沟通了请假的事情,看来是没问题了。下午继续找老师找机构,发现自己方向错了,重新开始。哪知道找到了深中的教练。他晚上和我聊了聊,发现自己的训练策略又错了(逃,然后在他的帮助下大致制定了训练方法。

但是他让我放低目标,NOIP 200+、CSP-S 300+(即稳出蓝题)的目标大概是达不到(但 NOIP 1=,CSP-S 1= 这个目标还是可以达到的,这就够了)。

如果我要奔着省队去的话,要在这三个月里把知识点都搞会才行。继续发展下去,高中省队还是很有戏的,这点倒是母庸置疑。

9 月 1 号这一天早早起床了,做了详细的训练规划,再问了一下深中教练,然后做了一下金老师那边的题目。

这几天太久没刷题了,感觉暑假的状态没有延续下来。不想虚度光阴,好不容易争取到了停课资格,我可不想玩。但是脑海里确实萦绕着颓废的念头。这让我很不爽。

正如萨特所言,自由意味着责任。

倘若不停课,我就不必承受“你需要搞好竞赛”的责任,被问到,也只需要回答“别人停课我没停,别人当然比我厉害啊”就可以了。我在现在才感受到自由带来的这份责任的沉重,前几天我还能凭借着激情、激动,以及各种自欺欺人的理由让我不去思考这件事情,但是现在,在大家都开学了,我还宅在家里对着电脑训练的时候,一股强烈的不安与后怕涌上心间,我知道,我躲不掉了。

我是自由的,这意味着我需要承受失败的压力、孤独的痛苦、训练的枯燥。

我是自由的,这意味着我可以拥有未来的可能、成功的喜悦、弹性的安排。

我失去了闭上双眼随波逐流的资格,我成了自己人生的掌舵人,我不得不独自面对学海上的大风大浪,再也不能归咎于船长的无能。

我的时间是我的,这既令人向往,又令人害怕。

如果没见过类似的结构、套路、性质、想法,那么想不出来这道题目十分正常。
本文收录了一些,在解题中反复出现的思维方法和思考路径。

解释思维的方法,无非就是,要么分析性质,要么根据经验,要么灵光一闪吧。本文章旨在记录非常常见的经验,以及分析的基本方法。

步骤

  1. 摸性质、猜性质
  2. 试算法、摸性质

按题型分类的思考起点

  1. 操作:思考操作顺序、操作影响、操作次数、操作取值、将操作顺序当作序列(红蓝球、禁忌数字)
  2. 新定义:先考虑这个定义单独怎么求(f(A)表示序列连通块数量,区间神秘数)。
  3. 博弈题:找 必胜 or 必败 态。然后证明,若不处在 必胜 or 必败 态,则一定处于相反态。
  4. 计数题(所有方案的某种量的总和):考虑不同主体如何产生贡献。
  5. 构造题:考虑无解、按位构造、考虑上/下 界
  6. 交互题:一个常见思路:倒推题目,即假装我知道了 xxx,那么这道题就可以做了。为了知道 xxx,我需要。。。

常见的思考方法

  1. 剔除无用元素(2025 CSPST2、最短路公共路径)

  2. 简化问题,弱化约束,去掉限制,关注部分分,旁敲侧击地写题

  3. 刻画答案的样貌

  4. 正难则反

  5. 猜证结论

  6. 排序

  7. 考虑一个解被计入的情况

  8. 分类讨论:

    1. 数据密度明显不同:完全图
    2. 情况本质不同:<=,正负,奇偶
    3. 情况本身极少:相交/包含/不交
  9. 关注奇怪的地方

数据范围的提示

  1. n log n:排序,贪心,dp+优化
  2. n^2, nm, nmk:dp
  3. n^3:区间dp
  4. 20:状压DP、SOS DP
  5. m^3 log n:矩阵加速 DP
  6. 带 log:二分、排序、数据结构

题目暗示的算法思考方向

  1. 二维网格:枚举上下边界、按行/列 DP、格点 DP。
  2. 计数题:枚举钦定某一主体、考虑 DP
  3. 最优化:二分答案、DP、贪心、最短路
  4. 区间操作:前缀和/差分、线段树
  5. 二元关系:图论建模
  6. 可行性:DP、并查集、二分图
  7. 序列计数:DP

对于经常出现又难以独立发现的思维中间产物,如果系统性不够被称为知识,我们会称之为技巧、模型,或者”套路“。 ——zx2003

该笔记收录了一些,在写题过程中出现过的 trick。出现次数不够频繁而不能归入一般化的思维。但是又真切的存在于自身的神经网络中。

解释思维的方法,无非就是,要么分析性质,要么根据经验,要么灵光一闪吧。本文章旨在记录一些比较偏僻的经验。

通用

  1. 关注不变量

  2. 能离线的要离线

  3. 跳出动态过程(什么样的状态下),研究静态结构(存在什么):双栈序列

  4. 构造不出答案时,考虑维护答案。

  5. 考虑不同主体的贡献。

  6. 分类讨论(分治)

  7. 正序贪心难做,考虑倒序贪心(菜肴制作,ICPC睡觉)

  8. 先考虑下限,然后证明一定能到达下限。(构造单峰)

  9. 将决策顺序看作序列。(移动蓝球红球)

  10. 拆分贡献的时候,不要使用“事件触发”型贡献,把每个点剥离开来。(分段 mex 求最大和)

  11. 如果操作单点困难,考虑按照值域批次处理(构造单峰)。

  12. 想象状态空间,状态与状态的转移。

  13. 失败了不要慌张,思考最多失败多少次(最大三角形周长)

    DP

  14. 具有阶段性考虑 DP。

  15. 决策集合具有单调增减性,可以优化。

  16. 数位DP,用mask表示0~9中哪些数出现过

  17. 小区间变到大区间——>区间DP。

  18. 计数DP 转移时考虑合法集合的具体样子。

  19. 状压 dp 转移时,如果顺序不影响,可以只考虑 lowbit。

  20. 双字符串想 dp

  21. 代价存在某种不对称性,即在前面用和在后面用,代价不一样。考虑贪心,正反dp。

  22. 证明 DP 正确性:

    1. 收敛形dp:归纳法做
    2. 刻画答案的样貌
  23. 图上游走考虑矩阵加速 DP。

  24. 定义状态时人为添加约束,前提是约束与题目大约束不冲突。(邦邦的大合唱站队)

  25. 单调栈退栈时做转移(CF1407D 跳跃大楼)

  26. “质变点 + 不变段”的 DP:使用数学方法压缩不变段(添加逆序对 k)

  27. 子序列本质上是一种顺序约束,当顺序与题目无关时,就不需要考虑子序列的约束了(分段 mex 求最大总和)

  28. 正反 DP 枚举断点(f(A)表示连通块数量)

  29. 序列个数计数,考虑 DP。

  30. 真正会产生不同序列的位置,是不能被前面的序列所唯一确定的。(要/不要填mex的序列计数)

  31. 如果记录具体值行不通,尝试记录数量(要/不要填mex的序列计数)。

  32. 背包问题,涉及到多少种花费/价值,就往维度上放多少种。

  33. 排列计数 DP,如果约束只关注相对大小(最大值,大于),则状态也只考虑相对大小。

图论

  1. 虚点,超级源点,超级汇点
  2. 点的状态很少考虑分层图
  3. 染色:找出主体的不同状态,用边表示状态的异同。
  4. 二分图完美匹配 & 替换边:交替环
  5. DAG 从入度为 0 的点出发 dfs 能到达图上所有点。
  6. 构造序列,交替出现,构造二分图跑欧拉路径。
  7. 特殊图:
    1. 树形结构
    2. 完全图:输入量很少
  8. 连通性:并查集、搜索树
  9. 可行性:并查集、二分图染色
  10. 有向图:缩点
  11. topo 最小顺序:正着原图字典序 or 反着反图字典序
  12. 瓶颈路考虑 MST。
  13. 删边,离线做并查集加边。

  1. 子树查询考虑 dfs 序
  2. MST:
    1. 一般使用 kruskal
    2. 完全图、稠密图、通过公式生成边权,使用 Prim

图论建模

  1. 图论建模的时候,如果发现把 x 当作点,y 当作边难做,可以尝试把 y 当作点,x 当作边。

  2. 什么时候考虑图论建模?

    1. 二元关键字:数对 (a,b)

      1. 将 a、b 看作两个点,(a,b) 表示这两个点之间有边相连(CF2110E、单词接龙)
      2. 将 (a,b) 本身看作一个点
    2. 出现与图论结构相似的代数结构时考虑建模:

      1. 树的结构:只有一个父亲 —> 每个点只能被淘汰一次(选两个删一个);n - 1 条边 —> n - 1 个二元关系
      2. 边权结构:f(u) = f(v) + w —> 状态之间的转移代价
      3. 最短路结构:三角不等式
      4. 二分图结构:两种选择、奇偶性、见 2 思二分图
      5. 并查集:同一类、一种关系(食物链)
    3. 偏序关系:大于小于、放入、移动、嵌套

  3. 排列建图成多个不交环。

  4. 保留关键点优化建图

  5. 同余最短路:本质是通过取模来缩小状态空间,或者约束本身带有取模性质。关键词:无限次。常见形式:d[i]:mod x = i 的最小数(牛场围栏/类货币系统/跳楼机)

树上问题

  1. 算贡献,将贡献拆到 边 or 点 上
  2. 匹配问题,两个贪心方向:
    1. 尽量在子树内完成匹配
    2. 尽量不要与子树内的匹配

区间相关

经典例题

看到区间问题,就想到排序!!!

  1. 按右端点排序:

    1. 区间最少选点:CSP-S 2024 T2,维护上一个点的位置
    2. 最大不相交区间:会议安排,维护上一个区间的右端点
  2. 按左端点排序:

    1. 区间最少分组:廊桥分配,维护每个组的右端点
    2. 最少区间覆盖:维护 nxt 数组,下一个跳到的位置。可以不是覆盖成一个区间,多个点也可以:P4064 加法
    3. 区间合并:将相交的区间合并。维护当前区间。

以上问题都可以倍增优化。

经典形式

  1. 区间计数/最优区间:枚举端点,另一端考虑双指针、二分
  2. 区间修改:将操作映射到差分数组上(konbi 01序列问题)

线段树

  1. 考虑节点与节点、节点与标签、标签与标签之间的合并。
  2. 考虑节点与节点的合并时,分类讨论至少两种情况,答案落在左/右区间,答案跨越左右区间。
  3. 遇到难维护的操作,考虑操作最多能进行多少次。区间每个数取模/开方,最多进行 log 次。
  4. 若维护的信息没做过,有两种方法:
    • 拆分成好维护的
    • 直接研究操作影响

二分答案

  1. 处理 子段和/平均值/01分数规划 问题时要想到二分答案
  2. 最大值最小/最小值最大 考虑二分答案
  3. 单调性 考虑二分答案
  4. 寻找第 k 大,考虑二分答案:2026.8.19深圳模拟赛 T1

数学

  1. 值域取模裂成两类小值域。
  2. 有效取模最多进行 log 次
  3. 多重集排列数:n! / (相同字符出现次数! 之积)
  4. 整除 = 取模后为 0

数形结合

  1. 数对,不同属性之间比较:区间相交/并
  2. 数对,相同属性之间比较:二维平面

贪心

临项交换

交换论证

S1:断言存在一个最优解,符合某种结构。
S2:找到一个任意的最优解,找到它与结构矛盾的地方,调整。
S3:若调整后不劣,且调整的次数有限,证明成立。

解集是决策的集合。
常见技巧:分组、找到第一个不满足的地方

  1. 批量按值层处理,而非按位置拆贡献:(假山拍照,构造单峰)

反悔贪心

一种思想,非常灵活。通常由三个部分组成:

  • 历史决策集合
  • 替换时机(发现更优/不满足限制)
  • 替换规则(替换的代价/价值是多少)

常见特征是,有一个很自然很平凡的贪心,会带来一些问题,此时不要放弃,尝试反悔贪心来调整。思维的出发点是朴素贪心。
常见应用:股票买卖、选了它就不能选它的互斥选择、分队

mex

  1. 序列拆分,求最大 mex 总和:累加出现次数的前缀最小值。
  2. 刻画mex时,想象一个格子条,mex就是这个格子条里,最左侧的,未标记的格子。

序列

  1. 构造一个严格增序列 {a1,a2…ai},等价于构造一个不严格增序列 a{a1,a2+1,…ai+(i-1)}.
  2. 将操作顺序视作序列。
  3. 严格增 or 不严格增的约束,可以通过操作差分序列来解耦。
  4. 生成任意序列,意味着可以改变序列的每一项而不影响其他项(konbi 01序列问题)

杂项

  1. 股票买卖经典转化之,“i 买 k 卖 = i 买 j 卖 j 买 k 卖”。

  2. 括号序列经典性质之,“一个括号序列合法,当且仅当在任何时刻,左括号数量 >= 右括号数量,且整体数量相等”

  3. 拼数:按 A+B 和 B+A 的大小排序,可以证明构成偏序

  4. 字典序相关构造:枚举每一位,考虑这一位填什么(逆序对为 x 的字典序第 k 小排列)

  5. 字典序考虑贪心。

  6. 对角线相关:研究 x+y,x-y 的奇偶性、不变性。(V 填色)

    1. x-y 不变:处于同一主对角线上(充要)
    2. x+y 不变:处于同一副对角线上(充要)
    3. V 字型上 x-y / x+y 的奇偶性相同
  7. 满二叉:叶子交换到最左边所需要的边数,等价于它编号中 1 的个数(中/后缀最小字典序)

8.24

完善了区间贪心的笔记。
反悔贪心速刷:

  • 种树:将 “替换当前决策” 的价值加入堆
  • 建筑抢修:用当前决策替换 最劣的那个决策
  • Buy Low Sell High:股票买卖经典转化之,“i 买 k 卖 = i 买 j 卖 j 买 k 卖”。撤销 j 卖这次决策,只需要再把它买回来就好了。
  • Least Cost Bracket Sequence:括号序列经典性质之,“一个括号序列合法,当且仅当在任何时刻,左括号数量 >= 右括号数量,且整体数量相等”。先全选决策一,出现非法时,将决策一替换为决策二。先把决策做完,再考虑调整。
  • Olympiad in Programming and Sports:先全放入队1,再调整。
  • 社团招新:先不考虑约束随便放。在找到唯一超限集合进行调整。
  • 拯救小矮人:涉及到顺序的问题考虑排序。临项交换证明排序规则。反贪。

模拟赛。
补 T4。T3 力竭了。

8.25

模拟赛。
补题。
P12650(未码):分类讨论好题。

8.26

模拟赛。
模拟赛+补题。
CF888G:xor mst 板子
U694141:区修想差分,差分数组与原数组是双射。生成任意序列的本质是,可以独立的修改每一个点,而不改变其他点。翻转操作具有传递性质。转化之后就是 xor mst 板子。
复习一下。

8.27

补题:

  • U694143:反悔贪心。细节很多。
  • P5798:通过排序解决后效性。

AT_arc183_c:区间最值位置限制的排列计数。考虑相对大小。枚举最大值坐标。

8.17

CF2089C1(放弃了),完善了一部分笔记
一些基础数论的题:P1865(线性筛)、P1349(矩阵加速递推懒得码)
优化了训练策略。
算法学习:exgcd 以及相关的一些题目
码掉:P13514
P1127:建模找euler路径,和CF2110E很像。细节比较多。这种,为了相等量之间的联通关系而建立虚点的图论建模,通常可以将元素当作边,将属性当作点。
算法学习:CRT 和它的板子

8.18

P2421 & P1516:将约束形式化。扩欧。环上等差数列求公共项,本质解 exgcd。
数论学习:欧拉函数的性质、单个&线性求欧拉函数的方法
P2303:d=[1,n],满足 $\gcd(i,n)=d$ 的个数的 i,有 $\varphi(n/d)$ 个。
深中模拟赛T1:二进制分组。多个等差数列,求全局第 k 大。二分答案。
CF1994G(未码):加法,从低到高位考虑。这一位的取值受到 s 的奇偶性、当前位的取值以及上一位的进位的约束。根据约束设计状态即可。
P3431(未码):网格图树状数组维护最大值。扫描线。
P2579(未码):图上游走问题,考虑矩阵加速DP。将 12 次转移打包成一个矩阵。
P3694(明天继续):正难则反,状压 DP,神秘状态设计。

8.19

优化了训练策略。
模拟赛。
补充了一下笔记。
P3694(未码):定义状态时人为添加约束,前提是约束与题目大约束不冲突。
P12302(未码):正着贪心难做,考虑倒序贪心。
CF2049D(未码):网格图考虑按行 DP。水题。
P10067(失败,明天继续):

8.20

P10067(明天继续):按值批层提升。
CF2039E(未码):研究操作取值&影响。“质变点”+“不变段” DP,只保留质变点的 dp 状态,数学压缩不变段。
CF2030E(未码):研究新定义。拆分贡献的时候,不要使用“事件触发”型贡献。
码掉:AT_arc100_c、T803311(然而失败了)

8.21

写出算法流程后请 AI 代笔:P10067、CF2027D2(然而失败了)
CF2027D2:平凡的序列最优化 & 计数 DP。
AT_arc170_c(未码):序列计数dp。对于本质不同的情况需要分类讨论。序列计数,关注那些固定了之后,整个序列也会随着规定的量。如果记录具体值行不通,尝试记录数量。
计数 dp 速刷。

8.22

图论建模速刷:生成树、(同余)最短路、边权结构连边、数对连边(两种)、偏序关系连边、同一类考虑种类并查集
硬币问题:存在最大不可表示金额当且仅当所有硬币 gcd = 1. (P2662)
P15593(未码):考虑简单情况,再添加约束。将操作思考成

8.23

上午模拟赛
下午模拟赛
晚上数学考试

当你无法用现有的知识体系去解释一个题目的解法时。

先不要沮丧。这是你成长的绝佳时机。

当你发现你可以用现有的知识体系去理解一个题目解法,但你没有想出来是。

也不要沮丧。这是你在不断强化自己体系的过程。

8.10

ABC466E:值域取模,分裂成两类小值域。
P2812(懒的去码):SCC 缩点模板题。重要的性质是 DAG 从所有入度为 0 的点出发 dfs,最后能到达图上所有点。
CF2046C:二分答案。check 里枚 x 当作扫描线,然后用值域 BIT 上倍增求出 y 验证即可。
CF2110E:图论建模。把关键字当作点,数对当作边,建出来一个二分图,满足交替相等的性质,在这上面跑欧拉路径即可。

知识学习:欧拉路径、BIT 上倍增 & 线段树上二分(CF1354D)
旧题重做:T784496 B. 旧址

8.11

P1070:处在同一条斜线上的转移可以用单调队列优化。
规范了一下 DP 的解题流程。
P8903(未码):正反做 0/1 背包,枚举断点。
P5851(未码):两种区间 dp 的综合。一是合并两个区间,二是取左右端点。
P2607(未码):图论建模。版的基环树处理方式。树形dp。
P2585、P1441(懒得码):水题。
CF721C(懒得码):topo DP 的水题。但是有一个把 0/1 背包较大维当作值记录的小技巧,详见例题
P2831(未码):我的做法是预处理出会使用到的函数,对应一个消除名单,状压dp,可以做到 2^n * n^2。可惜只有 85pts。
正解转移时只考虑最后一个 0 去除冗余。做到 2^n * n.
P6902(未码):环上最小区间覆盖。简化问题成链,不难想到排序贪心。破环成链,变成区间覆盖。log 实现区间覆盖,要想到倍增。

8.12

模拟赛爆零。T1 组合数少一个特判 100–>0. T2 贪心假了一分木有。
CF222E: 题解区: 矩阵加速DP; 我: 倍增. 就很…你们懂吧 [捂脸哭]x3.
ABC470F(未码):二元关系建模。块与块独立,计算多重集排列数累乘即可。
码掉:P8903、P5851、P2607、P2585、P2831

8.13

P6772(未码):图上游走考虑矩阵加速dp。按 k 分段处理。拆点、预处理矩阵次幂。
P7914(未码):区间 dp。直接转移很困难,通过维护其他量实现转移。
码掉:P6902
P13514(未码):动态维护前 k 大。排序,离散化(注意要互异),离线,线段树上二分。
AT_arc100_c(未码):SOS DP。核心转化是,若 $i | j == k$,则 $i, j \in k$ 是必要的。
补T2(未码):基环树,首先考虑树/环的情况。猜结论,构造出环上最优解。树上路径求和,拆分贡献到边上,然后对环上结论做推广即可。

8.14

P4206(未码):记忆化搜索实现期望 DP。定义势能为dis,每一条转移都是从势能大转移到势能小,因此无环。
P2515(未码):将环缩成点,树上背包。
CF449D(未码):SOS DP 板子。处理 a&b&c…&d = 0 的方案数,0 可扩展至 x。
完善了一些 SOS DP 的笔记。

8.15

学习回退背包。
CF981E(未码):可以用回退背包瞎搞。正解是排序后贪心优化可行性背包的转移。
P13520(未码):偏序关系考虑能否使用 dilworth 定理。转化为找最大反链。再将数对不同元素间的比较放到数轴上,转化为找区间最大交次数。
学习Dilworth 定理。
码掉:ABC470F、P6772
ABC模拟赛。

8.16

CF1701E(未码):代价不对称,发现最优解结构。正反DP,枚举分界点。
P1707(未码):矩阵加速dp板子。
P4159(未码):矩阵加速dp板子。图上游走,拆点,本质P6772弱化版。
AT_arc189_c(未码):惊世好题。首先考虑只有一个约束,对排列建图,会形成多个环。断环成链,在序列的视角下看链,发现最优解一定是任意解的子序列。问题转化为求两个序列的最短公共超序列(SCS)。这个问题等价于求 LCS。序列求 LCS 又可以优化成求 LIS。
排列–>环–>链–>序列–>scs–>lcs–>lis.
初赛模拟。
码掉:P7914

有些迷茫啊。我很难说暑假结束前能不能大概切青。

至少luogu上要有 100 道题目以上吧。21 天甚至更少的时间,每天切三道差不多?哦感觉还行。

我当然想去省队啊!!!

看着大佬们的博客羡慕死了。

好想成为 OI 高手!自己实在是太菜了啊。

不过这个东西只能慢慢来吧。只能说按照我的节奏慢慢走了。

要相信自己呢。

我们应当认为,中高考与算法竞赛不是智力游戏,它们同时还考察着训练策略、心态调节等能力。

0%