ybtoj题型整理

全心全意 品质为真

常用技巧

构造

1.通过一些构造,将原问题转化为更易于解决的问题.

  • 将一个与答案有关的二维组转化为0/1矩阵.
对应题目

H. 4.序列个数

2.对于特殊的状态或操作,我们可以设立一个虚拟点.

对应题目

例题2 新的开始

I. 5.宫室宝藏

例题3 行为方案

3.在遇到一些新定义问题时,我们可以考察关系P是否具有传递性,若具有,我们可以通过分别构造满足某约束的唯一对象C,D,使得AC,BD有关系P,这样,当且仅当C=D时,AB有关系P.

对应题目

J. 5.相似字符串

位运算

1.对于一些与二进制位有关的问题,我们可以依次的考虑每一位.

对应题目

H. 4.序列问题

K. 5.二进制

2.我们发现异或有性质xx=0,因此设树的根节点为r,可以将链i,r与链r,j合并,得到链i,j,而不需要考虑lca(i,j)是谁.

对应题目

例题3 最长异或路径

3.对于两个数i,j,如果ij的前k位都相同(由高到低),第k+1位不同,不难发现如果一个整数m的第k+1位与i一致,则有im<jm.因此,若ij,则有2M1个整数m使得im<jm.

对应题目

I. 5.运动积分

4.若定义f(x)=x&2n,我们发现该函数是有周期性的.

对应题目

K. 5.二进制

数学

1.k个集合Ai的交集为空集的充要条件是:对于任一元素iU,i不会同时出现在所有Ai中.

对应题目

H. 3.集合统计

2.等差数列有性质:ai+ani为常数.
对应题目

I. 4.公式推导

3.对于一个有明显可以运用平方差找到与它相配对的根式常数,我们可以考虑运用平方差公式解决问题.
对应题目

J. 5.斐波拉契

4.对于一个二元方程,可以考虑用一个未知数表示另一个.

对应题目

例题3 不定方程

5.如果数学公式的分母是一个一次的二项式,可以考虑换元处理.

对应题目

例题3 不定方程

6.余数可以做如下变形:

a mod b=aabb

对应题目

例题5 余数之和

7.如果有一个整数k,需求一个数列an=kn,可以使用数论分块的方式,时间复杂度O(n).

对应题目

例题5 余数之和

8.m!2的质因子数量为i=12imm2i.

对应题目

G. 4.随机问题

9.同时对变量乘和除交叉进行,比先乘完再除浮点误差小.
对应题目

H. 5.打牌概率

10.对于区间的平均值问题,我们发现考察是否存在一个区间[l,r],使得

i=lrairl+1>q

是较为困难的,但我们发现原式等价于

i=lr(aiq)>0

这个问题是比较简单的,只需要新数列中有一个区间元素和非负即可.

对应题目

例题3 最大均值

数据结构

1.现有一个序列ai,对任意元素ai,记小于ai的极大元素为aj(j<i),我们需要求解上一个出现的ajai的距离.对于这个问题,我们采用双向链表法,每个元素都是一个栈,栈中每个元素i对应的ai就是栈的序号.我们先将所有ai都压入对应栈中,然后从右向左处理每个i,找到链表中ai的上一个元素,即对应的aj,随后将i出栈,若该栈已经为空,则将该栈在链表中删掉.

对应题目

I. 5.字符匹配

2.单调栈可以解决在序列ai中,对任一位置i,求最小的j,使得j>iaj<ai的问题.

对应题目

F. 1.最大矩阵

3.霍夫曼树:现有一些节点,每个节点有权值wi,要求构造一个k叉树,每个节点的深度为depi,使得widepi最小.

对应题目

例题4 荷马史诗

树论

1.如果需要求解一棵树上满足某性质的一条链i,j,我们可以考虑对每个u,枚举两个u子树上的点i,j,通过递推的某种性质将链i,u与链u,j合并,得到链i,j,并计入答案.

对应题目

例题3 最长异或路径

2.在dfs序的角度上,树上的每个节点都管辖着一段区间.在如果该树满足二叉搜索树的性质,则可以认为一个点的子孙节点都在该区间内.

对应题目

I. 5.二叉查找树

F. 1.树上操作

3.我们有一些链(ui,vi),求解对于每个点i,经过该点的链的个数.这个问题可以树上差分解决.

对应题目

例题3 运输计划

4.若两棵树的直径分别为(u1,v1),(u2,v2),则若我们在两棵树间添加一条边,新树的直径为(u,v),则有u,v{u1,u2,v1,v2}.
对应题目

F. 2.删边操作

图论

1.如果边和点均具有权值,如果我们发现每个点的经过次数恰好等于与其相连的边数,那么不妨在计算边的权值时,直接计算边权与两端点权之和.

对应题目

E. 1.最短时间

2.我们可以通过数学推导,自己定义一条边的代价值.

对应题目

I. 5.重建小镇

3.对于一些每个状态带有一个附加属性(且属性值域不大)的题目,考虑用分层图.

对应题目

例题4 汽车加油

H. 4.最小花费

4.对于一些不等式组,我们将它转化为同一形式aiaj+d,用d代表边权,跑差分约束.

对应题目

E. 1.比较大小

例题4 恒星的亮度

基本思想

1.对原问题做一些简单数学变形来简化问题,或企图寻找最优解的性质.

对应题目

D. 1.喂养宠物

2.我们通过一些手动模拟/打表的方式,来获得一些特殊性质,从而解决问题;对一些规则依赖严格,不少位置有唯一解的方案统计题,不妨手动模拟一些情况,找规律,得出数学公式.

对应题目

G. 3.无限序列

H. 3.数字对

F. 2.砖块游戏

G. 2.填充棋盘

3.当我们发现问题含有多个未知数,难以同时考虑时,在时间允许的情况下,我们可以考虑将其中一个未知量枚举处理.或者在有单调性时,二分处理.

对应题目

H. 4.保留道路

H. 4.超级钢琴

H. 3.数字对

H. 4.荒岛野人

I. 5.重建小镇

4.对于一些情况复杂的题,我们可以考虑将复杂情况转化为较简单情况.

对应题目

G. 2.质数问题

贡献计算

1.计算贡献时,可以考虑每种结果有多少种方案数,再相加.

对应题目

J. 5.计数问题

D. 1.比赛得分

2.考虑每个元素对答案固定不变的贡献,再分离的考虑有关于具体方案的贡献.

对应题目

E. 1.排队接水

3.我们通过一些数学变形,考虑树上每个节点对答案的贡献/维护每个节点的一些性质,直接得出答案.

对应题目

G. 3.lowbit 求和

H. 4.前缀询问

I. 5.运动积分

E. 1.路径求和

H. 4.权值统计

4.对于一些答案贡献来源复杂的题,我们可以分别讨论每一种贡献来源,用不同方式解决.

对应题目

例题3 与众不同

区间问题

1.对于一些考察区间内有无含有特殊性质的元素的问题,我们可以通过记录上一个有特殊性质的位置来实现O(1)的查询.

对应题目

H. 4.序列问题

2.对于一个集合A,其中每个元素都是一个整数集的有限子集,我们需要找到一个最短区间[l,r],使得对任意MA,总存在一个kM,使得k[l,r].这个问题我们考虑尺取法(本质双指针),记录当前每个集合Mi中我们已包含的元素个数cnti,我们每次将右指针拓展,如果左指针处元素不属于任一集合M,或对任意集合Mil,都有cnti>1,则左指针可以收缩,并计入答案.

对应题目

例题4 单词背诵

3.我们在处理一些区间问题时,不妨将原区间转化为左闭右开区间,这样会便于合并/分类...

对应题目

F. 2.序列破解

差分与前缀和

1.在计算i,jaiaj 时,我们可以使用前缀和技巧,将复杂度降至O(n).

对应题目

I. 5.运动积分

2.我们在处理区间问题时,可以通过前缀和等技巧转为单点问题.

对应题目

F. 2.序列破解

F. 2.方阵问题

E. 1.合法序列

3.使用差分技巧来解决区间等差数列加问题.

对应题目

H. 3.魔法传输

杂项

1.我们从x个数中可重复选出两个,方案数为x2,因此涉及到x2的题可以考虑从计算数对个数的角度计算贡献.

对应题目

I. 5.运动积分

2.处理较高维的问题时,可以先处理低维问题,在考虑如何向高维转移.

对应题目

J. 5.计数问题

3.遇到可以将前后连为一个环(在模意义下)的题目时,可以考虑复制一份,按链处理.

对应题目

例题2 移位包含

K. 5.二进制

第一章 基础算法

递推问题

1.我们一般考虑将含有i个元素的问题的答案,由f(i)(其中f(i)<i)的问题答案来推出.

对应题目

例题1 错排问题

E. 1.求 f 函数

F. 2.砍树问题

2.当我们发现我们设计的状态难以转移(或是无法满足无后效性)时,我们考虑升维(时空足够).

对应题目

例题2 传球游戏

F. 2.划分数列

3.对于一些数的划分问题,为保证答案不重复,我们采取非降原则.

对应题目

例题3 数的划分

4.我们考虑在模拟解决一个问题的过程中,是否有一个特殊的时间戳,将其转化为多个形式相近的子问题.

对应题目

例题4 栈的问题

5.当每种方案较为复杂,但遵循一定规律时,我们考虑将每一种方案用一些特殊属性唯一表示出来.或者说,当状态难以转移时,我们给状态的定义附加一些特殊性质.

对应题目

I. 5.等距跳跃

I. 4.生日欢唱

贪心算法

1.用你的人类智慧去猜测一些最优方案,并尝试证明.

对应题目

例题1 奶牛晒衣服

G. 3.出栈序列

例题3 畜栏预定

H. 4.序列问题

G. 3.字符串题

F. 2.通讯问题

F. 1.最大矩阵

2.经典题型:线段覆盖

对应题目

例题2 雷达装置

I. 5.仙人掌题

二分问题

1.考虑二分答案,考虑如何对答案加以验证.我们考察大于答案的部分有什么异于小于部分的特殊性质.

对应题目

例题1 数列分段

例题2 防具布置

G. 4.跳石头

F. 1.最小权值

例题4 字符串环

E. 1.公共子串

F. 2.删边问题

G. 3.修建道路

I. 5.收费站点

例题3 运输计划

H. 3.最小间隔

H. 4.荒岛野人

2.用dp的方式去验证答案.

对应题目

F. 3.攻击法坛

3.二分结合Hash来解决一些字符串极大匹配长度/极大回文长度的问题.

对应题目

例题2 回文子串

例题3 对称正方形

深度优先搜索

1.依次对每个元素做出决策,递归搜索,随后回溯.

对应题目

例题1 拔河比赛

例题2 数独游戏

2.我们利用一些对答案的限制:可行性剪枝/最优性剪枝,在可接受的复杂度内对已做出的决策进行检验,从而剪枝.

对应题目

例题3 虫食算

F. 3.骑士精神

3.在剪枝仍不够优秀的情况下,我们可以探究已做出决策的量在数学上有何放缩不等关系,从而剪枝.

对应题目

D. 1.生日蛋糕

4.当发现O(2n)的复杂度无法接受,但n依然小到不爆搜令人惋惜的地步时,我们可以考虑将原序列分为两段,在O(2n2)的时间内处理两段的结果,再将结果合并.

对应题目

E. 2.最大费用

5.在面对类似背包问题,但值域巨大无法接受时,我们可以考察物品个数,尝试爆搜解决问题.

对应题目

E. 2.最大费用

6.我们可以结合贪心,找到最优策略后进行搜索.

对应题目

G. 4.最多约数

7.我们考察决策的对称性,尝试在保证正确性的条件下只做对称轴一侧的决策,从而将O(2n)O(n!)的复杂度降至O(2n2)O(n2!).

对应题目

H. 5.折纸问题

广度搜索

1.我们通过一些属性来定义状态,这些属性应该做到:明确下一步的状态,明确何时结束,(时空标程允许).由于bfs的天性,我们可以轻松计算出最小的操作次数/是否连通.

一些可能的维度:

  • 对象的坐标xi,yi
  • 某些技能的使用次数di
对应题目

例题1 走迷宫图

例题3 荆轲刺秦

例题5 逃离噩梦

F. 1.最小权值

J. 5.立体推箱

2.我们可以通过广搜来完成一些将一个矩阵分为一些连通块并计数/计算每个块属性的任务.

对应题目

例题2 山峰山谷

I. 4.渡过河流

3.在一些边权只有0/1的图上,我们可以进行0/1bfs.

对应题目

例题4 电路维修

4.有些时候,目标状态并不止一个,我们根据题意预处理目标状态有哪些.

对应题目

G. 2.射击问题

5.当目标状态也在移动时,我们可以在每次bfs完一个时间戳后模拟目标的移动.

对应题目

H. 3.追捕小狗

6.当我们需要前k优的方案时,我们可以类似bfs的方式,由最优解一步步退化,并入堆.

对应题目

H. 4.超级钢琴

第二章 字符串算法

字符串处理

1.字符串基本操作:

对应题目

例题1 数字反转

例题2 移位包含

例题3 单词替换

例题4 字符串环

G. 2.字符串还原

Hash与Hash表

1.通过计算某对象的Hash值,我们将一个对象转为一个整数,并通过研究其Hash值来探究原对象是否相等.

对应题目

例题1 字符串哈希

J. 5.回文分区

2.我们可以使用map/set/哈希表(unordered_map)来解决一些去重/查询问题.其中前者时间复杂度约为对数级,但元素有序;后者均摊常数复杂度,但元素无序.

对应题目

例题5 生日相同

例题1 字符串哈希

例题4 单词背诵

F. 1.特殊数列

G. 2.求好元素

H. 3.上课点名

I. 4.最大分离度

3.二分结合Hash来解决一些字符串极大匹配长度/极大回文长度的问题.

对应题目

例题2 回文子串

例题3 对称正方形

例题5 子正方形

KMP算法

1.我们可以通过KMP算法来求出模式串中匹配串的个数.

对应题目

例题1 子串查找

E. 1.公共子串

I. 4.写博客

2.kmp也可以求解周期.

对应题目

例题2 重复子串

3.当我们对某个位置的周期/border的某个属性(如最小/超过某值的最小)很感兴趣时,我们可以另开辟一个数组,并在满足其最小条件后,转移时只摆烂,不拓展.

对应题目

例题3 周期长度和

例题4 子串拆分

4.发现nxt数组其实是一个树状结构,可以在其上做一些dp任务.

对应题目

F. 2.前缀数组

5.我们可以通过nxt的定义,由nxt数组反推回字典序最小的原字符串.

对应题目

G. 3.字符串题

6.当涉及到只关心形式,而不关心具体字母的匹配时(如认为"abdbd"与"ghjhj"是匹配的),我们可以用元素与该元素上次出现的距离做匹配.

  • 类似的,如果我们只关心元素在子串中的字典序,我们可以匹配元素到上一个比它大的最小元素距离,到上一个比它小的最大元素距离,到上一个与它相等元素距离.
对应题目

H. 4.字符串匹配

I. 5.字符匹配

Trie树

1.通过Trie树来统计对于一个给定串S,在字典树中有多少串T满足ST的前缀/是否存在一个T,使T=S.

对应题目

例题1 前缀统计

例题4 阅读理解

E. 1.单词拼接

F. 2.最短前缀

2.我们通过将一个数用二进制的方式表示,看做一个字符串插入字典树,来解决有关于异或的问题.

对应题目

例题2 最大异或对

例题3 最长异或路径

G. 3.lowbit 求和

AC自动机

1.AC自动机可以在一个匹配串中同时匹配多个文本串.由于其拓扑排序的步骤,AC自动机可以在fail树上dp.

对应题目

例题1 单词查询

例题2 单词频率

例题3 前缀匹配

例题4 屏蔽词删除

G. 2.字符串计数

J. 5.单词记忆

2.在AC自动机上可以对每个节点进行dp,自动机状态转移边即为dp的转移,由于自动机显然有环,dp的一个状态必然是dp轮数.

对应题目

F. 1.组合攻击

H. 3.文本生成器

I. 4.最短字符串

第三章 图论

并查集

1.并查集是用来维护将一些元素合并为一些类别的数据结构.同时代表元素也可以存储一些有关该连通块的属性(如大小).

对应题目

例题1 并查集

F. 1.躲避拥挤

G. 2.约束条件

J. 5.沧海桑田

2.带权并查集可以用来维护一些合并元素,并且可维护每个元素与代表元素关系的数据结构,并且该关系可以通过更新前权值和旧代表元素权值推出.

对应题目

例题2 银河英雄传说

例题3 食物链

I. 4.数列询问

3.并查集可以处理一些序列问题,我们设一个元素的代表元素代表该元素的下一个(包含该元素)可用元素,如果某元素在用过后就不可以再使用,我们就把它和它的前一个/后一个元素合并.

对应题目

例题4 超市购物

H. 3.染色操作

J. 5.沧海桑田

最小生成树

1.通过kruskal生成最小生成树.

对应题目

例题1 繁忙都市

例题2 新的开始

例题3 公路建设

2.我们可以通过最小生成树来贪心解决一些问题.

对应题目

例题2 货车运输

3.我们可以通过对最小生成树的某条边进行松弛,得到次小生成树.

对应题目

例题4 次小生成树

最短路径

1.可通过dijkstra的方式,求单源最短路(无负边).

对应题目

例题1 单源最短路径

F. 2.删边问题

2.用spfa算法来判负环,求解含负边权的最短路.

对应题目

H. 5.飞离地球

例题2 负环判断

I. 5.收费站点

3.不一定最短路就是边权和,可能是某个属性.

对应题目

例题3 最优贸易

G. 3.修建道路

4.通过floyd去解决图上任意两点u,v间的最短路.

对应题目

I. 4.最大分离度

强连通分量

1.tarjan可用于将一个强连通分量缩成一个点,随后在DAG上做dp.

对应题目

例题1 有向图缩点

例题2 受欢迎的牛

例题3 最大半连通子图

例题4 恒星的亮度

E. 1.网络传输

F. 2.通讯问题

G. 3.删点次数

I. 5.宫室宝藏

第四章 数据结构

堆的应用

1.堆可以动态维护一个集合中的最值.

对应题目

例题1 合并果子

例题3 龙珠游戏

G. 3.内存管理

2.堆可以用来维护前k大/前k小.

对应题目

例题2 序列合并

3.堆可以维护最值,从而支持一些贪心的决策.

对应题目

例题4 工作安排

E. 1.家庭作业

F. 2.选数游戏

H. 4.火车载客

树状数组

1.树状数组可以用来实现一些区间查改,单点查改的操作.

对应题目

例题1 单点修改区间查询

例题4 区间修改区间查询

例题5 单点修改矩阵查询

例题6 矩阵修改矩阵查询

2.树状数组可以支持动态区间求和,从而优化dp.

对应题目

例题3 严格上升子序列数

3.特别地,(权值)树状数组可以求逆序对.

对应题目

例题2 逆序对

G. 1.星星问题

H. 2.维护差数

4.权值树状数组可以通过初始全1,一个个-1的方式来维护区间内有效元素个数.

对应题目

J. 4.秘密邮件

RMQ问题

1.st表可以离线查询区间最值.

对应题目

例题1 数列区间

例题4 矩阵最值

E. 1.接水问题

F. 2.方阵问题

G. 3.降雨量

2.st表可以支持运算,当且仅当xx=x.

对应题目

例题2 静态区间

线段树

1.线段树可以维护区间和/积.

对应题目

例题1 求区间和

例题2 区间查改

F. 1.树上操作

2.线段树可以模拟一些操作.

对应题目

I. 4.和或异或

J. 5.括号匹配

3.线段树可以维护最长前缀/最长后缀,从而解决某区间的一个有特殊性质的子区间问题.

对应题目

例题3 公园遛狗

4.线段树可以维护一个区间内某个元素的数量,实现桶排序.

对应题目

例题5 字符串排序

5.当我们发现对某一元素的操作次数是极其有限的时,我们只需暴力进行操作,与此同时记录区间内已经操作到底的元素个数.

对应题目

G. 2.取模问题

LCA问题

1.我们可以通过求解lca来判断两节点是否有祖先关系.

对应题目

E. 1.祖孙询问

2.树上一条链的长度可以分解为两端节点到lca的距离和.

对应题目

例题1 树上距离

例题2 货车运输

倍增问题

1.若我们可以进行多次操作,但是操作到一定程度不能再操作,并且可以判断是否操作过度时,可以使用倍增处理.

对应题目

例题1 查找编号

例题2 开车旅行

D. 4.图上查询

2.如果我们对是否可以由u2k条边到达v,我们可以设计状态由u是否能经2i条边到达vfu,v,i,可以通过类似floyd的方式转移.

对应题目

C. 3.跑路上班

3.通过在对数级时间内获得信息来优化dp时间复杂度.

对应题目

E. 5.小明聚会

第五章 动态规划

背包问题

1.普通背包

对应题目

例题1 采药问题

2.完全背包

对应题目

例题2 货币系统

3.多重背包

对应题目

例题3 宝物筛选

例题4 硬币方案

G. 2.求好感度

4.树上背包

对应题目

H. 4.软件安装

例题5 金明的预算方案

例题4 选课方案

5.混合背包

对应题目

F. 1.购买商品

6.可以在每个物品上消耗多份代价.

对应题目

H. 3.魔法开锁

7.如果有多种代价,可以将dp数组升维.

对应题目

I. 4.购买礼物

区间dp

1.区间dp可以考虑某个区间内的元素所得到的答案.

对应题目

例题1 石子合并

例题5 棋盘分割

F. 1.删数问题

H. 3.方格涂色

2.较为复杂的考虑状态转移--最高宗旨就是只要让区间长度变小就好,哪怕只有一格.

对应题目

例题2 木板涂色

3.也可以设计状态为某区间在一定特殊性质下的答案.

对应题目

例题3 消除木块

4.如果有类似"删去相邻两个物品,使得它左右相邻"的表述,则可以从枚举断点和区间左右端点可以相邻两个角度转移.

对应题目

例题4 最大收益

5.如果有类似"删去一个物品,使两侧相邻"的表述,且操作贡献与两侧相关,我们发现计算[i,r]转移方式可以是先删掉[i,k],再删[k+2,r],再删k+1,这样的话删k+1时的左右两侧就是l1,r+1.这样的话每个f的值都是建立在[l,r]的左右元素都未被删除的条件下,且转移成立.

对应题目

G. 2.恐狼后卫

6.如果操作的代价与最大/最小值有关,且涉及到类似"删去相邻一段物品,使得它左右相邻"的表述,我们也可以先将子区间删掉,再删掉值域在一定范围内的物品.注意检查转移的全面性,不仅要及时计算[l,r]内删掉值域不在[mn,mx]的物品的代价,还要计算[l,r]内物品删光的代价.

对应题目

J. 5.最小代价

数位dp

1.数位dp主要思考前面填的位置的什么属性对答案是有影响的.记搜即可.下面是一些常记录的属性.

  • 是否出现某(些)数字 状压记录是否出现过每个数字
对应题目

H. 4.魔法数字

  • 是否被某些数a1,a2,a3...整除 记录已经填的数对lcm(a1,a2,a3,...)的余数.
对应题目

例题1 B数计数

  • 是否出现某数字串 记录填的数的后缀与目标串匹配长度(或者已经填的数中已经包含目标串).
对应题目

例题1 B数计数

E. 1.幸运666

  • 某些数出现次数 每个数出现的次数(此时需要考虑前缀0)
对应题目

例题2 区间圆数

例题3 数字计数

F. 2.乘积计算

G. 3.奶牛编号

2.如果被卡常了,可以循环预处理出dp表,然后接着搜.

对应题目

H. 4.魔法数字

树形dp

1.记录每个节点被覆盖的状态.

对应题目

例题1 树上求和

例题2 结点覆盖

2.如果父节点的状态可能由子节点转移,子节点可能不能重复转移时,可以额外记录次优解.

对应题目

例题3 最长距离

3.从根结点出发,要求经过树上所有点,求最短长度,就是用总边权2倍减掉最长链长度.

对应题目

F. 2.树上移动

E. 1.最短时间

4.记录子树的大小.

对应题目

G. 3.块的计数

5.我们可以由底到顶进行一次dp,再从顶到底计算更有普遍性的问题答案,再进行一次dp.

对应题目

例题3 最长距离

I. 5.周年纪念日

单调队列

1.有数列ai,对于每一个l,单调队列可求max{al...l+len}.

对应题目

例题1 滑动窗口

2.我们可以利用单调队列的功能优化dp.

对应题目

例题2 粉刷木板

例题3 耗费体力

H. 3.最小间隔

3.不一定dpi范围就是dpik...i1,可以手动模拟每次滑动窗口的位置.

对应题目

例题4 燃放烟火

例题5 跳房子

G. 2.最大指数和

4.有时转移范围(或者说区间长度)并不是固定的,要预先求出范围,再双指针跑单调队列.

对应题目

I. 4.写博客

J. 5.出题方案

第六章 数学基础

矩阵快速幂

1.矩阵快速幂可用于一些线性递推问题.具体的,若有序列ai,其递推公式为

an=i=1mkiani

则可以发现性质:

[k1k2km1km10000010][ai1ai2aim]=[aiai1aim+1]

因此可以实现快速幂优化.

对应题目

例题2 斐波那契数列

F. 1.数列求解

2.普通的快速幂可以实现an的快速求解.

对应题目

例题1 序列的第k个数

G. 2.填充棋盘

H. 3.集合统计

J. 5.斐波拉契

3.类似于矩阵相乘的操作,只要满足交换律,结合律,都可以使用矩阵快速幂.(尤其是类似有限步floyd)的操作.

对应题目

例题3 行为方案

例题5 最短路径

4.给定一个n×n矩阵A,以及一常数k,要求求出矩阵B=A+A2+...+Ak.

我们构造一个矩阵

M=[AI0I]

这样,不难发现,该矩阵有如下性质:

M2=[A2A+I0I]

根据数学归纳法,不难得到:

Mn=[Ani=0n1Ai0I]

对应题目

例题4 矩阵求和

质数和约数

1.欧拉筛可以在线性时间内筛出质数.

对应题目

例题 1 线性筛素数

2.当查询区间较小时,可以考虑先求出[1,r]内的素数,再对每一个素数进行查询区间内的埃氏筛.

对应题目

例题2 质数距离

3.将一个数质因数分解可以直接暴力枚举,时间复杂度O(n).

对应题目

例题3 不定方程

F. 1.哈希函数

4.哥德巴赫猜想:对任意一个偶数k>2,都可以将其分解为两个质数的和.

对应题目

G. 2.质数问题

5.有一个数列an,现要求找出一个数对(i,j),使得gcd(i,j)最大.我们可以对每个元素都枚举因数,在找到最大的记录过两次的数,时间复杂度O(nn).

对应题目

J. 5.最大公约数

6.我们将一个整数d表示为i=1npiki的形式,则d的约数个数为i=1n(ki+1).

对应题目

G. 4.最多约数

例题3 不定方程

例题4 反素数

F. 1.哈希函数

7.我们将一个整数d表示为i=1npiki的形式,则d的约数之和为i=1nj=0ki1pij.

对应题目

例题2 约数之和

同余问题

1.exgcd可以求解ax+by=m的解,进一步的,这就等价于求解axmmodb,特别地,也可以求解逆元.

对应题目

例题1 同余方程

F. 2.青蛙相会

H. 4.荒岛野人

I. 5.魔法操作

2.线性求逆元:我们设p=kx+r,则有:

r r11modp

(pkx)r11modp

kr1x1modp

因此,我们可以通过r的逆元推得x的逆元,实现线性求区间[1,m]p意义下的逆元.

对应题目

例题3 线性求逆元

3.中国剩余定理可以求解线性齐次同余方程组,更一般地,exCRT可以处理pi,pj不互质的情况.

对应题目

例题4 中国剩余定理

G. 3.猜数游戏

4.在值域不大时,如果我们需要求解一些乘法除法后变量对p取模的结果,但p不是质数,我们可以将操作数质因数分解,与p共有的部分记录指数,查询时快速幂处理,与p互质的部分直接乘或乘逆元.

对应题目

I. 5.魔法操作

5.如果想求解一个数对合数取模的结果,可以先将合数分解,再使用CRT合并.

对应题目

例题3 古代猪文

6.如果需要求解anmodP,但n极大,我们有

anan mod ϕ(P)modP

对应题目

例题3 古代猪文

7.对任意质数P,ϕ(P)=P1.

对应题目

例题3 古代猪文

组合数学

1.对于任意i[1,n]以及一常数n,可以用Cni=ni+1iCni1的方式递推,时间复杂度O(n).

对应题目

I. 5.魔法操作

2.组合数有性质:Cni=Cnni.

对应题目

I. 4.公式推导

3.组合数有性质:i=0nCni=2n.

对应题目

I. 4.公式推导

4.对任意i,j[1,n],我们可以用Cij=Ci1j+Ci1j1来递推,时间复杂度O(n2)

对应题目

例题1 计算系数

D. 1.方程的解

5.当模数不大时,我么可以用卢卡斯定理求解组合数:

对应题目

CnmCn mod pm mod pmodp

例题2 方案统计

例题3 古代猪文

6.如果想要使用卢卡斯定理,但是模数是一个合数,可以使用exLucas定理.

对应题目

例题3 古代猪文

7.面对将元素分为一定数量组的题目时,可以使用隔板法.

对应题目

D. 1.方程的解

F. 3.数列计数

8.在棋盘格上选择一些不在同一行,不在同一列上的点,可以先考虑在哪几行上,再考虑在哪几列上,最后考虑将这些行和列做全排列匹配.

对应题目

E. 2.车的放置

9.可以考虑使用容斥原理进行计数.

对应题目

G. 4.随机问题

10.可以将组合数转化为阶乘,在进行数学变形.

对应题目

H. 5.打牌概率

11.常见的组合数:卡特兰数.

对应题目

例题4 栈的问题

博弈论

1.NIM游戏的先手必败,当且仅当ai的异或和为0.

对应题目

例题1 取火柴游戏

2.对于一个有向图游戏组合,先手必败,当且仅当sgi的异或和为0.要计算sg值,只需将所有可能的转移情况记录下来,取第一个未被记录的.若转移结果是一个有向图游戏组合,只需求异或和在记录即可.

对应题目

例题3 魔法珠

E. 1.数位游戏

3.若题目中的游戏只规定何为胜,我们需要先将其转化为败的边界.

对应题目

例题4 剪纸游戏

4.也可以通过寻找规律来考察何时先手必败.

对应题目

例题2 数字游戏

F. 2.砖块游戏

H. 4.红与蓝

5.阶梯NIM:将第i个位置的m个箱子转移到i1处,无法操作者败.该问题只与奇数层/位置的箱子数有关,做奇数位置的异或和即可.

对应题目

G. 3.石子游戏

期望问题

1.依次计算每项的期望,再相加.

对应题目

例题1 单选错位

2.考察添加一项对答案有什么增加量.

对应题目

例题2 期望分数

3.如果一个状态的到达方式不唯一,不妨倒着考虑问题.

对应题目

例题3 路径长度

3.概率dp时,可考虑已求得的dp值的实际意义来设计转移.

对应题目

J. 5.单词记忆

E. 2.电影问题

posted @   snowycat1234  阅读(340)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示