ZR 省选摆烂记
Day 1 - 数据结构
链表
Problem 1 - 洛谷 P10061
很精妙的链表题。
首先考虑特殊性质,旋转整个矩阵改怎么做。
显然只需要维护矩阵旋转了多少次即可。
特殊性质好做的原因正是矩阵的“结构”没有变,原来相邻的数还是相邻,即旋转后的修改可以映射到原来矩阵的修改。
因此考虑用十字链表来维护修改。具体来说,对于每个位置
- 这个位置是在
的上/下/左/右; - 这个位置的值与
的差; - 这个位置在未经过任何修改的矩阵中的位置。
并查集
Problem 2 - CF571D
还是比较简单的,应该没有紫。
首先启发式合并,考虑一棵并查集合并组成的树。
我们显然不能在树上下放标记的,所以可以直接打上标记,查询时暴力跳即可。由于启发式合并,跳的层数不会超过
因此,我们可以记录上一次子树清零的时间。查询时,在每个节点上二分找出没被清零位置的和,总时间复杂度为
但实际上,我们发现每个节点的时间标记不交,所以只需要一次二分,可以做到单
扫描线
Problem 3 - 洛谷 P9624
首先我们考虑刻画答案。如果移动范围的 X 坐标为
首先消去后面的
接下来就变成了
考虑对
首先令
发现对于
但是
这时候,如果我们要将前缀对
因此用线段树二分找到第一个需要覆盖的位置,转化为区间覆盖即可。
接下来考虑
Problem 4 - CF983D
差不多懂了,但是还需要看代码理解。
讲解用的代码:https://codeforces.com/contest/983/submission/252374761
线段树合并
Problem 5 - 洛谷 P5298
直接根据 DP 方程算出
这里具体讲如何实现线段树合并。
首先,我们发现 DP 方程是一个用左右儿子的前缀和、后缀和组成的式子。然后,我们可以在向下递归的时候分别维护前缀和、后缀和。
Problem 6 - QOJ6322
和上面那题差不多吧。定义
历史和
Problem 7 - CF1824D
首先通过前缀和将下界全部转化成 1,然后扫描线 + 历史和。
接下来可以发现可以用区间求和的线段树解决。
具体实现没怎么听懂,所以写得很简略。
Problem 8 - CF1787I
首先发现一个序列的 beauty 值就是最大可空前缀 + 最大可空子段和。
后面类似 http://cplusoj.com/d/senior/p/665?tid=6737676bfd7bfdc3a346aede,可惜没听懂。。。
分块
Problem 9 - 洛谷 P8360
首先,不能用线段树是因为不能 pushup,不要像我一样差点陷入误区。
然后:
- 对于散块,直接重构。
- 对于整块修改,用带权并查集维护答案。
具体实现等到代码写完会补充一些细节。
Problem 10 - CF1540D
不会,记得补。
长链剖分
Problem 11 - 洛谷 P5291
大概就是先用点减边容斥 + 树形 DP 表达结果,然后长链剖分优化 DP 即可。
Problem 12 - 洛谷 P5411
首先,为了统计答案,我们找到直径中点。如果
令
然后可以推出转移方程。同理可以写出在子树外的转移方程。
接下来用矩阵表示转移,用长链剖分即可。
杂题
Problem 13 - 洛谷 P11369
对操作分块,设块长为
然后的东西比较难,有空再补。
Problem 14 - CF1693E
不会,记得补。
Problem 15 - CF1740H
性质题。首先发现每个节点的权值是
剩下的有空再补。
Problem 16 - CF1610G
看上去比较简单,但是没听懂。
Problem 17 - CF1464F
不会,记得补。
Problem 18 - 洛谷 P10611
不会,记得补。
Problem 19 - ?
貌似洛谷没有原题。
不过还是不会。
Day 2 - 图论
最短路
Problem 1 - CF1801D
核心:Dijkstra 不一定只能维护最短路。
考虑维护对于每个节点维护
接下来,为了维护消息,我们需要定义
显然,如果
但是对于其他情况我们不能直接确定大小关系。此时,因为数据范围比较小,所以我们对于每个节点维护一个
最小生成树
Problem 2 - AT_cf17_final_j
- Boruvka 算法:每次在连通块中找到一条最小的出边。
首先令当前
接下来我们就要找到
首先丢弃
然后加上
欧拉回路
Problem 3 - QOJ 8056
首先发现题目就是在模拟 DFS。所以接下来的就很简单了。
分析一下询问次数:首先每条边会被经过两次,一次往下走一次回溯。
然后每个点还会多向自己的父亲节点询问一次,所以总询问次数肯定是
Problem 4 - QOJ 5434
首先分析答案上限。
定义
不难发现
因而可以得出
也就是说,对于
而显然我们只需要满足
接下来欧拉回路建图即可。
连通性相关
Problem 5 - QOJ 5437
首先边双缩点。显然,对于一个
但是我不会容斥,所以没怎么听懂。
Problem 6 - 洛谷 P8456
考虑圆方树。
然后不会了。
Problem 7 - 洛谷 P10790
不会,记得补。
Day 2 - 网络流
老师推荐题单:洛谷 training 465429。
最大流
Problem 1 - GYM 102201 J
建图:
首先,正常跑网络流绝对会超时。
发现左边的的流量均大于右边的流量,且左边的流刚好比右边的流多 1。因此考虑将左边
首先处理
否则一定会剩下一个点到汇点
Problem 2 - 洛谷 P2764
首先答案等于总点数减去最多能合并的点数。
然后考虑怎样才能合并。不难发现,对于一组边
接下来就很好做了,不再阐述。
Problem 3 - CF1630F
一个图为二分图等价于没有奇环。
而不难发现,如果有长度为
接下来拆点。令
考虑连边。对于一组
接下来的不会了,记得补。
最小割
最大流等于最小割。
更深刻地理解最小割(?):
- 有
个 01 变量和 个限制 ,表示当 时会产生 的代价; 恒为 , 恒为 ;- 问最小代价。
上面的问题等价于最小割。
Problem 4 - AGC038F
不会,记得补。
Problem 5 - P4313
由我们前面的部分以及题目的各种细节,不难想到最小割。
因此,我们可以将题目中给出的所有数组加起来,然后减去最小无法取到的值。
对于节点
- 令
连一条流量为 art 的边, 连一条流量为 science 的边; - 由后面完整的建图,我们必定不会两条边都断掉;
- 断掉
的边表示不选文科,否则代表不选理科。
对于节点
- 找到
的四个相邻的位置 。 - 由前面的转化,只要
中只有一个选了 art,则我们无法获得 same_science 的价值,选 science 同理。 - 但是直接建边肯定会算多遍 same_science。所以我们可以建一个虚点
,让 连一条 的边,让 连一条 same_science 的边。
最后跑最小割即可。
Problem 6 - P3227
会了,不过没写。
Problem 7 - ARC176E
发现
对于一次操作后,肯定满足
考虑如何处理
接下来的有空再补。
Hall 定理
这里应该有一个解释,可是我还没补。
Problem 8 - ZROI 某题
不会,记得补。
费用流
Problem 9 - AGC034D
不会,记得补。
模拟费用流
Problem 10 - P1484
不会,记得补。
上下界网络流
Problem 11 - GYM103855I
会了,但是没补。
Day 3 - 组合记数
组合记数
Problem 1 - QOJ9611
因为直接计算式子并不好算,所以考虑原式的组合意义。
定义
剩下的不会了,记得补。
Problem 2 - QOJ9561
Problem 3 - CF1988F
暴力的想法:直接 DP。
设
转移:考虑插入
考虑优化 DP。
发现前缀最大值出现的位置肯定不会大于最大值的位置,后缀最大值出现的位置肯定不会小于最大值出现的位置,所以我们可以把原 DP 定义中的
令
不难得出
接下来就是简单推式子了,不再叙述。
Problem 4 - CF1086F
首先答案本身并不好计算,而
发现
然后就不会了。。。
Problem 5 - 洛谷 P10360
不会,记得补。
Problem 6 - AGC050F
不会,记得补。
Problem 7 - P9385
不会,记得补。
Problem 8 - CF1349F1
首先发现好序列的个数是
通过手玩之后,可以找到一种双射方式。对于一个好序列,将值为 1 的位置倒序加到排列后面,再将值为 2 的位置倒序加到排列后面,以此类推。
接下来考虑计算答案。
由我们的双射方法,可以发现一个好的序列的最大值为
剩下的就是简单 DP。令
Problem 9 - jsc2022final_f
link: F - Share the Recipe
不会,记得补。
Day 4 - 数论
素数
- 定义
- 根号级别检测
- 线性筛
Miller-Rabin 素性测试
首先,由费马小定理,有
特判 2。因此
令
接下来钦定
你说得对,但是有空再补。
Pollard-Rho
接下来的有空再补。
逆元
- 定义略。
- 可以证明模
意义下的所有数构成一个域,所以对于任意在 里面的一个整数 都有一个乘法逆元。 - 拓展欧几里得求法。
- 费马小定理求法。
离散对数
- 阶:如果
,则定义 关于 的阶为最小的 满足 ,记作 。 - 显然,对于
关于 的阶 满足 。 - 同时,有一个性质:
。 - 证明可以考虑证明
和 。 - 原根:
为 的原根当且仅当 且 。 - 离散对数:满足
的 是 关于 在模 意义下的 ,记作 。做法是 BSGS / exBSGS。
Problem 1 - ?
题面:
给定素数
其中
做法:
首先,
接下来加法卷积即可。
Problem 2 - 洛谷 P6730
首先考虑建图。如果
接下来考虑计算答案。首先缩点成一个 DAG。
定义选到的点为黑点,没选到的点为白点。一个点要被选当且仅当这个点是黑点且前面没有白点。接下来就可以用期望的线性法则即可。
考虑暴力建图。同时对两边取个离散对数,可得
由前面阶的性质,
至此,本题完成。
中国剩余定理
- CRT:考虑类似拉格朗日插值的做法即可。
- exCRT:简单 exgcd 合并答案。
Problem 3 - 洛谷 P3726
前置知识:范德蒙德卷积,exLucas,一个小定理(?)。
范德蒙德卷积:
exLucas:略。
一个小定理(?):对于
我们定义,当
首先,题目相当于是让我们求
将
接下来,不难考虑枚举
由前面的范德蒙德卷积,我们的式子可以转化为
接下来考虑计算原式。
首先,我们到现在为止都没有用过
因此考虑用上面的一个小定理。(尽管
当
可以证明这个枚举范围
Problem 4 - 洛谷 P3301
- 对于
的限制:
将将这个数减去
- 对于
的限制:
考虑容斥,然后转化成上面的情况。
Problem 5 - ?
发现每次操作会形成一个置换。于是操作二就是求置换的
接下来考虑操作一。发现置换由许多置换环组成。对于每个环,我们都想让它前进
莫比乌斯反演
- 积性函数:
有 。 - 完全积性函数
有 。 - 积性函数的性质:只需要定义
,就确定了 ,其中 为质数。 - 数论函数的卷积(狄利克雷卷积):
。- 性质:
为积性函数。 - 同理可以定义
当且仅当 。求法类似容斥。 - 定义
。 - 有一个重要性质:
。 - 同样可以用
反演。 , 。 - 莫比乌斯反演:
。
Problem 6 - 洛谷 P2257
板子,略过。
Problem 7 - 洛谷 P3455
板子,略过。
Problem 8 - LOJ6076
首先推式子。推出来的结果是
最后发现满足 sigma 里面的式子不为 0 的方案很少,所以直接枚举不为 0 的
Problem 9 - 洛谷 P3327
- 重要性质:
。
接下来的部分略。
Problem 10 - LOJ6539 / CF1575G
直接推式子即可。需要注意的是由于
首先,满足
而根据排序不等式,上面的东西不会超过
Problem 11 - 洛谷 P4240
- 首先有
。
首先不难发现必须枚举
式子记得补。
筛
- 线性筛略过。
- 杜教筛:求积性函数的前缀和。
- 若
且 和 的前缀和,则我们可以在 的时间复杂度内求出 的前缀和 。 - 记得补个式子。
- Min_25 筛:
- 首先算出
中 为质数的 的前缀和。 - 然后的不会了,记得补。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效