2023.05 做题记录
- [Ynoi2009] rprsvq 【线段树,组合数学,OEIS】
五月第一题,是 Ynoi!虽然这题基本没有 Ynoi 的感觉。
考虑对于一个集合
由经典的组合数恒等式
带回得到
后面两个东西是好维护的,可以用线段树搞定:维护区间和以及平方和就行了。
前面这个东西还要继续化简。记
最后一步就是求 a(n+4) = 2*(n+3)*(n+2)^2*a(n+1)-(n+3)*(13+5*n)*a(n+2)+(4*n+13)*a(n+3)
,这样就可以算出
总时间复杂度 int
,开 int
之后取模乘法不要直接乘。
- ARC077F SS 【kmp,字符串,border 理论】
设
当
当
时间复杂度
- ARC066F Contest with Drinks Hard 【dp,斜率优化,决策单调性】
修改显然是个不好做的东西,但是这玩意儿和连续段相关,考虑预处理前后缀答案然后拼起来。
用
这个式子拆开来,按照是否和
倒过来的话是相同的,可以如法炮制。
你以为做完了吗?显然不是啊,还有经过修改位置的情况。这个也可以考虑预处理,用分治的方法优化 dp,用单调栈维护上凸壳,复杂度
总时间复杂度
- P4584 [FJOI2015]带子串包含约束LCS问题 【AC 自动机,dp】
首先这个
接下来是 LCS 的问题,这里可以采用子序列自动机,记录一下两个串的所在位置。
状态数一大堆,用 unordered_map
。
- P4583 [FJOI2015]世界树 【高精度】
首先求出使得叶子达到深度
同时求出使得叶子达到深度
那么我们的目标就是求出最大的
观察到满足
但是这题丧心病狂,卡空间。考虑使用压位高精,将问询离线排序从小到大找答案。
- P5795 [THUSC2015]异或运算 【数据结构,trie,可持久化】
比较板子的题。
时间复杂度
- P5335 [THUSC2016]补退选 【trie】
简单题。考虑每次插入进 trie 的时候,对于每个更新了的位置查看它当前值是否超过了历史最大值,如果有就用 vector
记录一下位置。
均摊复杂度显然是正确的。
- P5794 [THUSC2015]解密运算 【后缀数组,贪心】
非常妙妙题。
发现这玩意儿是一个后缀数组排序的样子。考虑观察
复杂度
- ARC081E Don't Be a Subsequence 【子序列自动机】
子序列自动机板子题,把自动机建出来搞个 dp,反着跳一边就行了。
复杂度
- ARC081F Flip and Rectangles 【异或方程组,悬线法】
首先考虑如何判断一个矩形
既然是
时间复杂度
- P8511 [Ynoi Easy Round 2021] TEST_68 【01 Trie】
良心 Ynoi,拜谢拜谢。
首先求一下全局的最大值,这个显然可以通过 Trie 搞定,复杂度
考虑哪些点是取不到
注意卡空间,要用 int
。
- P9168 [省选联考 2023] 人员调度 【线段树分治,树剖,贪心,Hall 定理】
感觉很厉害。
首先想一个不带删的做法,考虑怎样的一个方案是合法的,根据 Hall 定理不难发现是任意一个子树中选的点个数不超过子树大小。
那就可以贪心了:从小到大加入,每次对于祖先一条链上的点,选出一个最小的替换掉,这个可以用树剖 + 线段树 + set 做到
观察到每一个人员的出现时间是一个区间,所以最后只需要一个线段树分治来支持删除,时间复杂度
好像可以全局平衡二叉树 / LCT 做到
代码 4.3KB,写了 1.5h,调了 0.5h 无果,吃了个饭回来发现 Pushdown 写挂了,修了一下就过了,开心。
- P9169 [省选联考 2023] 过河卒 【博弈论,拓扑排序】
小 E 题/怄火。
考虑到状态数是
现在问题就变成了一个有向图上状态走,得到胜负平局的结果。建出反图倒着推一遍就行了。
代码 3.45KB,细节很多,写了 1h,调了 20min,还卡常,最好用 int
而不是 ll
。
- P3643 [APIO2016] 划艇 【dp,组合】
好像有拉插做法,不太会。
离散化一下,设
转移的时候考虑枚举上一个包含的区间
时间复杂度
暴力,记
可能要用 bitset
判断状态是否存在,这样复杂度还带一个
- CF1821F Timber 【组合数学,二项式反演,多项式】
大家好,我是不会 poly 也不会 GF 的小菜狗,于是我用纯组合意义做出了这道题。
考虑对于每棵树记录一个倒下的点,记为
我们把固定的
考虑容斥,记
考虑套入二项式反演的式子并且加入
- CF1780F Three Chairs 【数论,容斥】
白给题,这都能 2F?
首先排序,那么相当于选出
考虑计算
时间复杂度
- CF1750F Majority 【组合,dp,容斥】
太厉害,太厉害。
设
考虑如何转移:对于
对于
这个转移可以通过维护上三角前缀和,即
因此总时间复杂度为
首先拆位。
对于每个 and
接下来,考虑一个贪心,每次选出没填的个数最多的行或者列,任意选一个搞成符合条件的。
证明不想写,但是很好想。
每次把所有行列过一遍,需要
- P9271 [CEOI 2013] Splot 【树形 dp】
一款逆天问题。
思路很简单,考虑把这张图转成一个树的形式,然后 dp,记录当前的源点和汇点有没有被堵上。
细节......多的离谱,写了 3.46KB,吐了吐了。
最近怎么做了一堆大码量题和板题,是不是应该找点有技巧的题做做啊。
- P3621 [APIO2007] 风铃 【贪心】
题意就是交换左右儿子,使得树变成完全二叉树。
首先叶子如果深度差大于
时间复杂度
- P3622 [APIO2007] 动物园 【状压 dp】
断环成链,记录前面
很久没有更新了,来点白给题。
直接求
做完了,复杂度
- [ARC082F] Sandglass 【折线法】
超级好题目!
首先有一个显然的
我们考虑将
观察这些折线的性质:首先有一个显然的性质是,对于任意
其次我们可以发现,如果一条折线在某一个位置顶到了
我们维护
重合是好判的,对于所有的顶点判一下就行了。
给定的数组和问询是有序的,因此时间复杂度是线性的
- [ARC082E] ConvexScore 【凸包,组合,product trick】
某种意义上来说是一个 product trick,组合意义还是很厉害的。
考虑到一个凸包的贡献是
因此我们要计数的就是满足包含一个子集组成了这些点的凸包的点集个数。
正难则反,考虑计数不合法的点集个数,这就是所有点共线的方案数,对于每条直线,减去
可以枚举两个点确定一条直线,因此复杂度是
好像也可以优化到
- P5443 [APIO2019] 桥梁 【操作分块,数据结构】
首先对于操作分块。
对于之前块的修改可以直接做掉,对于当前块的修改从大到小排序,问询用可撤销并查集查询就行了。
复杂度根号 log,log 似乎在外面,也有可能是里面。
- [ABC077D] Small Multiple 【同余最短路】
记
- P4602 [CTSC2018] 混合果汁 【主席树,二分】
考虑二分答案,那么相当于判定按照
虽然
要支持查询不同前缀,所以改用主席树,复杂度
- P4562 [JXOI2018]游戏 【数论,组合】
考虑一个数什么情况下必须被删:当
每个关键的数都是独立的,并且相互是对称的,考虑计算出关键数的数量
- P4151 [WC2011]最大XOR和路径 【线性基】
模拟赛有个题的暴力是这玩意儿,但是我当时没做过这题,于是自己玩出来了,感觉很厉害!
考虑异或的性质:如果不断绕圈是会抵消的,所以我们把路径分为链和环两部分考虑。
任意 dfs 出一条
- [ARC084F] XorShift 【线性基,bitset】
太智慧了,真的想不出。
设
尝试用线性基做数位 dp,数位 dp 就是固定一个前缀相等,然后算,这部分是
接下来是人类智慧部分:考虑一种均摊的方式,每次消
因此我们可以发现,初始串和之后消出来的串总个数也是
还可以使用 bitset 优化,复杂度
- [ARC083F] Collecting Balls 【树的拓扑序计数,图论建模】
还是很人类智慧,真的想不出。
对于一个球
考虑将这样的二元关系建图,形成基环树森林,如果不是基环树森林无解。
我们现在要求的就是对于每个连通块的一个定向方案求出拓扑序个数。
每个连通块最后都会变成一个内向树森林,而拓扑序个数就是
但是考虑基环树有两种定向方式,所以把环反过来再跑一遍就行了。
时间复杂度
- CF1439E Cheat and Win 【博弈论,虚树,位运算】
太厉害。
首先瞎猜一个结论:只要每一层都是偶数个黑点那么后手必胜。
考虑达到这个条件的最少次数,如果每一层的黑点个数都求出来了,那么相当于相邻不同的 pair 个数,所以考虑建立虚树。
建虚树需要求 LCA,可以做到
- [ARC085E] MUL 【网络流】
最小权闭合子图,没了。
- [ARC085F] NRE 【dp,数据结构】
区间按照右端点从小到大排序,设计一个 dp 方程:
可以预处理一个前缀和,方便
- SP4060 KPGAME - A game with probability 【dp,期望,奇怪技巧】
首先
这时候猛然发现输出一个浮点数,各种乱搞思路就突然出现了:观察到这玩意儿很快就会收敛,到
如果早点看到这个题我可能就会 APIO T1 了,可惜没如果。
- CF150C Smart Cheater 【期望,数据结构】
每一段的利润是独立的,可以分开算,现在相当于对于每个乘客求区间最大子段和,可以线段树维护,复杂度
我们设首项为
分析一下枚举的时间复杂度:是
- CF1070L Odd Federalization 【结论,bitset,高斯消元】
结论:答案至多为
- CF613D Kingdom and its Cities 【虚树,dp】
以前一直没太搞明白虚树的栈建法,这里记录一个非常简洁的建立方法。
将所有关键点按照 dfs 序排序,求出相邻点的 LCA,再次排序,对于相邻点
正确性不证了。
建完虚树随便 dp 就行了。
- CF1152F2 Neko Rules the Catniverse 【矩阵快速幂,状压 dp】
太厉害了,神仙题。
按照位置顺序不好计数,考虑按照值域的顺序 dp。设
直接暴力转移就能过简单版,加强版考虑矩阵快速幂即可,复杂度
和 UM 单挑的时候他似乎被这题诈骗了,乐。
考虑预处理出每个节点到根的路径上最小值。观察到黑点只加不删,于是观察每个黑点和其他黑点形成路径的关系。我们强制设第一个黑点为根,这样每次加入一个点可以和根组成路径,对于子树内的点答案就都会跟这个值取 min 了。问询的时候,我们维护每次加入的黑点的到根的最小值的最小值,和这个点的最小值做比较就行了。
复杂度线性。
- CF725F Family Photos 【贪心】
我们记每个栈里的
观察到
考虑另一种分析:先手不一定非要取到最优的利益,他可以退而求其次。因此如果
复杂度
- CF613E Puzzle Lover 【dp】
观察一条路径在
可以分开做 dp。
特判长度
复杂度
Kummer 定理:
于是就可以数位 dp 了:设
复杂度
- CF1037G A Game on Strings 【博弈论,SG 函数】
UM 搬的人类智慧题,被初一学弟一小时秒杀了,我觉得很厉害。
观察到有用的串个数是
直接记忆化搜索,记录所有前后缀信息,复杂度就是
- CF1326F2 Wise Men 【FWT,容斥】
首先考虑容斥:钦定集合
钦定一个集合的方案数,我们考虑问题的实质就是图上选出
- CF1305G Kuroni and Antihype 【最小生成树】
首先想一个转化:加入一个虚点
优化建图过程,考虑枚举子集,就能做到
- CF1082F Speed Dial 【Trie,树形 dp】
UM duel 的时候爆杀我,太强大。
建出 Trie 树,这是显然的,接下来考虑怎么 dp。设
我想的是记录子树内的状态,这样是不好做的,因为合并相邻子树的时候会爆炸。
- CF825F String Compression 【kmp,循环节】
考虑一定是尽可能选择长的循环节压,对于一个串,循环节就是
于是预处理所有后缀的
- CF1473G Tiles 【多项式】
笨蛋主播小粉兔跟我 duel 这题只比我这个多项式彩笔快 20 分钟,乐的。
设
后半部分利用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】