人类智慧
记录在各种题目看到的人类智慧操作。
[](https://www.luogu.com.cn/problem/)
写得很随便区
+ ([](https://www.luogu.com.cn/problem/))
$\implies$
- 有若干对数,从每对数中选一个使选出的数互不相同(P9170 [省选联考 2023] 填数游戏)
每对数之间连边,有解仅当每个连通块都是基环树或树。 - 具有周期性的树上点到根路径加问题(P6623 [省选联考 2020 A 卷] 树)
对周期做差分。每个点的答案为进它的子树时的差分值与出子树差分值的差。 - 一道 DP 题的多个方案会算出重复答案(P7519 [省选联考 2021 A/B 卷] 滚榜)
假设只求最优方案。 - 在 DP 过程中计算一个单调不降的序列的和(P7519 [省选联考 2021 A/B 卷] 滚榜)
代价提前计算。 (P3768 简单的数学题)
。(不要老想着转 辣!)- 给定矩阵中每个 2*2 子矩阵的和构造原矩阵,满足所有元素
。(P7515 [省选联考 2021 A 卷] 矩阵游戏)
先通过 构造一个没有值域限制的 ,然后构造一个矩阵 使得 加上它不会使 改变。差分约束解出 即可。 - 构造系数使原随机序列和为
。(P7703 「MCOI-09」Dream and Strings REMATCH)
每次将序列两两配对,到最后期望差值最大值为 。 - 询问树上与一个点深度相同的合法点个数。(P7394 「TOCO Round 1」History)
在 bfs 序上维护。 - 动态单点修改字符串/插入字符并查询 LCP。(P4036 JSOI2008 火星人)
使用平衡树维护哈希值并二分哈希。 - 给定若干条带权路径,求树上不经过某个点的路径的权值最大值。(P3250 [HNOI2016] 网络)
二分 ,满足 。 。(P3497 [JLOI2014] 聪明的燕姿)
。- 网格图上最短路径计数问题。(P6137 [IOI2012] 理想城)
拆成横向和纵向移动;对于每一块 2*2 连通都只用连三条边,于是变成一棵树,因题目特殊性质不会影响答案。 - 问最少有多少个元素需要操作。(P3447 序列变换)
问最多有多少个元素不需要操作。 。(P3327 [SDOI2015] 约数个数和)
。
写得没那么随便区
(qwq)
表示自己想到的进度。
### . - [](https://www.luogu.com.cn/problem/)()
8. 2-28 P9167 [省选联考 2023] 城市建造(图论,圆方树,DP)
把删去的边连接的点叫做关键点。在边被删掉后,每个连通块里都要恰好有一个关键点。考虑如果要存在这么一个删掉的边集,关键点集需要满足什么条件。
- 原图的每个点双只有三种情况:没有关键点,有一个关键点,全是关键点。
如果点双里已经有两个点是关键点,那么为了使它们在删边之后不在同一个连通块,连接它们的所有路径都要断掉。因为在点双里,你肯定会不小心把点双里的另一个点变得跟这两个关键点都不连通,然后就多了一个关键点……
要是放到圆方树上,那么删边就可以转化为删方点。并且删掉的方点必须在忽略圆点后是连通的。于是我们成功将边集转化为了点集。
现在你的目标是通过删方点使得圆方树上的连通块大小差不大于
你大可以直接枚举连通块大小。
……
7. 2-26 P9170 [省选联考 2023] 填数游戏(图论)
首先你需要知道怎么使
那么根据题意,问题可以转化为:Bob 需要选每条边
然后可以大力对每个连通块分讨了。称上面
- 是基环树。
你发现其实 Bob 这时只有两种定法,也就是取决于那个环的两种定向。显然非环边只能定向朝叶子的一端。看起来这很好解决。
对于非环边,Alice 肯定会尽量往叶子定向。
对于环边,鉴于 Bob 会选择两种定向方式中重合最少的那种,我们需要让两种定向方式的答案的较小值尽量大,也就是尽量平衡两个方向的边的数量。求出环上两种单向边和双向边的数量,那么问题在于双向边如何分配给两个方向,这是好算的。
注意处理重边自环。
- 是树。
这时有一个点 Bob 可以不选,那么 Bob 每条边怎么定向取决于这个不被选的点是哪个,那么每条边就只能往外侧定向,相当于是 Bob 以它为根定了一棵外向树。
Alice 的定法要求 Bob 所有定法的最小值最大。考虑怎么搞。
设
现在问题同样在于双向边。找点性质。你发现如果要使
那什么时候能让这种不优定向方式尽量不出现呢?就是 Alice 的定向也是一棵外向树的时候。换句话说,Alice 会钦定一个根,并且她会尽量把所有边往外侧定向,就能尽量让定向不存在面对面的情况。
那我们枚举这个根是哪个就好了。可以用线段树维护在目前的根时所有的
总复杂度
6. 2-26 P8293 [省选联考 2022] 序列变换(括号树,贪心)
看似是一个题,实际上是四个题。自己做的时候因为推了假结论当场去世。(qwq)
首先考虑这个很花里胡哨的操作到底是什么东西。如果放到括号树上,那么操作
你发现这个做法似乎跟
输出 。
尽量把每一层的点都接到同层最大的那个点上面去防止这个最大的造成贡献。可以 multiset。
尽量让每层最大的点以后再也不要贡献了。这时可以把其它点先接到最小的点上然后把这个最小的点接到最大的点上。同样可以 multiset。
发现这个贪心情况好像比较玄学。如果把最小点留在这一层的话会导致它的贡献被过早结束;如果把最大点留在这一层的话会导致它被过多地贡献。因为如果我们也按
(等待垃圾博主彻底理解这题在干什么)
5. 2-23 模拟赛 T1(链表,均摊)
01 矩阵,问有多少个子矩阵的和
。 。
先补集转化。然后考虑枚举上下边界。(qwq)
将每一列分为没有
发现在下边界逐渐下移的过程中,每列的类型变化是均摊
4. 2-22 P7515 [省选联考 2021 A 卷] 矩阵游戏(构造,差分约束)
(qwq)
先通过
可以构造一个矩阵
3. 2-20 P9169 [省选联考 2023] 过河卒(博弈论,拓扑)
去年考场上把我整不会了。其实现在看感觉只要理解了里面的博弈策略就只剩码力的问题了。
考虑所有可能的棋子状态。发现最多
- 一个状态为必胜态仅当存在一个后继状态为必败态。
- 一个状态为必败态仅当所有后继状态都为必胜态。
- 否则是平局。
首先我们根据题意把所有已经确定为必胜态/必败态的状态找出来。优先级由上到下。
- 黑棋在第一行:黑棋必胜,红棋必败。
- 有棋的位置重合:刚操作完的必胜,准备操作的必败。
- 无法操作:刚操作完的必胜,准备操作的必败。
然后从这些状态开始倒推其它状态。需要魔改拓扑,一个点能被确定状态并且推进队列仅当:
- 能到一个必败态,被确定为必胜态。
- 能到的所有状态都是必胜态,被确定为必败态。
至于步数:
- 必胜态的步数为第一次被必败态倒推到的时候的步数加一。
- 必败态的步数为最后一次被必胜态倒推到的时候的步数加一。
写就完啦!
等会没完。在
- 你发现实际上每个状态是哪个颜色在走是可以确定的,就是六个横纵坐标与初始状态的差值之和的奇偶性,常数减半。
- 钦定第一个红棋在第二个红棋的上方,常数再次减半。这时我过了。
(qwq)
2. 2-20 P4318 完全平方数(数论,二分,容斥)
出题人一定认为
直接找第几个好数太难了,不如二分答案去看
数学推导
那么这个完全平方数的正整数倍的定义不难联想到 (qwq)
绝对值不好处理,其实还可以写成
枚举
感性理解
每个平方数的倍数在
其实不是很懂为什么这里的容斥系数就是
1. 2-19 P7518 [省选联考 2021 A/B 卷] 宝石(树剖,倍增)
先考虑链的部分分。可以维护每个点能从最近的第几颗宝石开始走到,查询时上个数据结构二分答案,然后取出答案对应的宝石所在的点看看有没有办法从区间内的一个点出发走到。感觉很容易做到双
搬不上去……(qwq)
瓶颈在于如果要把树用链的套路做,那不管是树剖还是倍增,链都不止一条,但是你在不同的链之间转换的时候所谓的“起点”可能是任何一颗要取的宝石,既然连整条链上第一个被取到的宝石是哪一种都不确定,显然没有办法快速维护,重开吧。
发现一个事情:虽然我不知道我在每条链上是从哪种宝石开始取的,但是我知道每颗宝石被取的时候下一颗宝石是什么颜色的。可以把链上的每一个点,向它对应的宝石的下一颗所在的最近的点连边,那么宝石的取法就可以变成每条链上的一段路径。树剖一下把询问路径砍成一堆链,倍增一下就可以求出每条链里面的结果,问题就在于两条链之间要怎么衔接。假设我已经知道上一条链取到了那个颜色,那么我只要在下一条链上找到最近下一个颜色然后继续跑就行了,这个可以上一些类似在 map 套 vector 上二分之类的抽象东西做到。
总复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】