2020暑期题解集合+任务列表
写的大概是一些不太难的题目,避免它们写成常规题解又都埋没了。
本人太菜,如果想欣赏一句话题解请移步 Tiw 的博客。
花式 DP
树形 DP 。
显然我们只需要枚举质数作为 \(\gcd\) 的情况,以及一个很显然的 DP :
\(f(u,p)\):从 \(u\) 出发向子树内的 \(p|\gcd\) 的最长链。
转移略。目测状态会很大,优化一下。发现一定有 \(p|a_u\) ,而 \(a_u\) 不同的质因子数量很少。因此对 \(a_u\) 质因数分解一下,把可用质因子用作状态即可。转移的时候找出两棵树根的公共质因子,枚举并转移即可。
[AT3913] XOR Tree
状压 DP ,敬请移步正紧题解。
状压 DP ,敬请移步正经题解。
状压 DP 。
考虑将二进制数看作集合,原先 \(a_i\) 变成 \(A_i\)。则集合最大有 \(21\) 个元素。即全局 \(|U|=21\) 。
则与 \(a_i\) 相容的数对应的是 \(\complement_{U}^{A_i}\) 的子集。
于是可以考虑设 \(f(S)\) 表示 \(S\) 的某个子集对应的二进制数,并且出现在了序列里。如果不存在则 \(f(S)=0\) 。
转移可以直接 \(O(2^{21}\times 21)\) 暴力枚举一遍。最后查询答案即可。
AC 代码
树形 DP 。敬请移步正经题解。
状压 DP 。
不难想到枚举一下最小出现次数 \(L\) ,然后每种数出现次数 \(\in\{L,L+1\}\) 。
由于每种数要在序列上连续,又都要出现,考虑一个状压 DP :
\(f(i,S)\):前 \(i-1\) 个数,此时已经出现在序列中的数为 \(S\) 的最长长度。
在位置 \(i\) 进行转移的时候,发现直接钦定 \(a_i\) 作为下一种数进行转移即可。转移的数 \(\not= a_i\) 情况实际上总会在之后枚举到。然后就还需要一个 \(nxt(i,j)\) 表示从 \(i\) 出发,取 \(j\) 个和 \(a_i\) 相同的数之后到达的转移点。
最后发现 \(L\) 存在单调性,二分一下就可以得到 \(O(\log_2n\times n\times 2^8+n^2)\) 的算法。记得在二分的chk()
中直接更新答案。
状压 DP 。敬请移步正紧题解。
[CF908D] New Year and Arbitrary Arrangement
期望 DP 。
下文直接用 \(P_a\) 和 \(P_b\) 指代放 "a" 和放 "b" 的概率。
不难想到这样一个状态:
\(f(i,j)\):字符串中拥有 \(i\) 个 "ab" 子序列和 \(j\) 个 "a" 时,最终字符串的期望 "ab" 子序列个数。
考虑转移:
此时问题就变成了如何确定初始和目标状态。
目标状态是什么?应该是 \(f(0,0)\) 吗?不是,因为所有的 \(f(i,0)\) 都会向自己转移,推导一下就会发现它只会从 \(f(i,1)\) 的位置转移。因而我们应当钦定一个 \(a\) 在开头,将 \(f(0,1)\) 作为中止状态。
时间是 \(O(k^2)\) 。可以发现本题的难点在于寻找初始和终止状态。这个通常和转移与条件有关,需要灵活应对。
AC 记录 。
一般 DP ,自动机, DP 优化 。敬请移步正经题解。
[CF1060F] Shrinking Tree
DP 状态设计,转移。敬请移步正紧题解。
[AGC019E] Shuffle and Swap
构造,性质,序列 DP。敬请移步正经题解。
[HDU6796] X Number
数位 DP,状态优化,哈希,拼盘。敬请移步正经题解。
[HDU6864] Jumping on a Cactus
计数 DP (拓扑序),仙人掌,敬请移步正经题解。
区间 DP ,敬请移步 正经题解。
计数 DP ,敬请移步 正紧题解。
[CF1408G]Clusterization Counting
生成树,树上背包,敬请移步正经题解。
[CF1368H1]Breadboard Capacity (easy version)
网络流,最小割,DP,敬请移步正经题解。
优化状态,敬请移步正经题解。
转化,构造,区间 DP ,敬请移步正经题解。
神仙图论
[CF1407E]Egor in the Republic of Dagestan
最短路,DP 。
直接考虑 DP 。定义状态:
\(f(u,0/1)\): \(u\) 节点选择颜色为白或黑,到达 \(n\) 的最短路的最大值。
考虑转移,显然我们可以枚举邻边。此时我们就知道了对应边的颜色 \(c\) ,及对应边的终点 \(v\) 。那么显然我们应该用 \(\max\{f(v,0),f(v,1)\}+1\) 来转移 \(f(u,c)\) 。由于我们求的还是最短路,所以转移取 \(\min\) 。
这样 \(n\) 就相当于是所有状态的终点,不好做。我们建反图,然后直接 BFS 来转移就好了(类比 Dijkstra ,点 \(u\) 必须要在 \(f(u,0)\) 和 \(f(u,1)\) 都出队之后才能转移)。
时间复杂度是 \(O(n)\) 的。
[HDU6334] Problem C. Problems on a Tree
并查集,敬请移步正经题解。
数学杂论
保序回归特例、贪心 。敬请移步正经题解。
[AGC019F] Yes or No
概率期望,期望 DP。敬请移步正经题解。
势能分析(?)。敬请移步正经题解。
[HDU3430] Shuffling
排列,CRT
显然可以找出置换上的所有环。一张牌不可能跳出自己所在的环,也不可能交换环内牌的顺序。因此我们首先需要判断起始和结尾在环上是否可以匹配。顺便我们还可以得到,每个环应该转几次。
设有 \(k\) 个环,第 \(i\) 个大小为 \(s_i\) ,需要转 \(t_i\) 次。设总共转了 \(x\) 次,于是有同余方程:
用 CRT 把解搞出来就好了,这里还是要判断无解。时间是 \(O(n\log_2 p)\) ,\(p\) 是模数。
AC 记录。
[[校内赛/牛客2020多校赛第五场] Easy]
生成函数,计数 DP 。敬请移步正经题解。
莫比乌斯反演,预处理。敬请移步正经题解。
玄学结构
[CQOI2016]伪光滑数
特殊 DP ,可并堆,可持久化。敬请移步正紧题解。
[CTSC2018]混合果汁
二分,可持久化线段树。
显然我们可以二分答案。
此时我们就只能使用美味值大于等于二分答案的果汁。假如我们可以得到可用集合以价格为下标、升为值的权值线段树,我们就可以直接在线段树上二分,求出指定升数下的最小花费并判断。
显然我们就可以预处理出前缀的主席树。
时间复杂度 \(O(n\log_2n+q\log_2^2n)\) 。
AC 记录 。
[湖南集训]谈笑风生
离线,树状数组, DFS 序。
首先发现 \(b\) 要么是 \(a\) 的祖先,要么是 \(a\) 的子孙且离 \(b\) 不超过 \(k\) 。
前者的贡献很好计算。考虑后者。可以发现,一个合法的 \(b\) 带来的贡献就是 \(siz_b-1\) 。于是转而统计所有合法的 \(b\) 的贡献之和。可以按照深度从小到大插入所有节点,将 \(dep_a+k\) 之前的所有点都插入之后就可以统计 \(a\) 的子树内 \(b\) 的贡献。这个贡献可以很方便地展开到 DFS 序上用树状数组维护。
时间复杂度 \(O((n+q)\log_2n)\) 。
AC 记录 。
『MdOI R1』Treequery
可持久化线段树,倍增,分类讨论。 敬请移步正经题解。
栈模拟, DP 。 敬请移步正经题解。
[HDU6793] Tokitsukaze and Colorful Tree
离线,树状数组,DFS 序,分类讨论。敬请移步正经题解。
[CF446C] DZY Loves Fibonacci Numbers
分块暴力,斐波那契。
欸真是押韵。
正在学习分块,所以写了分块。
尝试直接维护前缀和,因为斐波那契数列有性质:
然后直接维护前缀和,前缀和的差值就变成了:
于是就变成了两个操作:区间统一加和区间叠加斐波那契。
第一个很好处理。第二个也不难。注意到斐波那契数列还有一个性质:
在一个块内,我们将区间叠加的斐波那契记录到左端点上,这些值是 \(f_{m-1}\) 和 \(f_m\) ;而某个点到左端点的距离是固定的,这些值是 \(f_{n-1}\) 和 \(f_n\) 。于是我们只需要记录左端点上的 \(\sum f_{m-1}\) 和 \(\sum f_m\) 。
时间是 \(O(m\sqrt{n})\) 。
AC 记录。
[CQOI2011]动态逆序对
谁一天没事就写 CDQ 树套树之类的呀
考虑一个在线的算法,不过我们不用树套树。
为了保护我们的身体健康,我们用分块作为外层结构,这样就会非常好写。
但这里存在一个问题——块的大小是 \(T\) 的情况下,单次询问是 \(O(\frac{n\log_2n}{T})\) ,做 \(m\) 次之后时间有点扛不住。
解决方法嘛 ...... 有两个。
- 减少查询时间。常用的办法是增加修改时间。我们可以分块套分块,内层继续用分块维护值域的前缀和。这样查询就可以降到 \(O(\frac{n}{T})\) 。
- 减少查询次数。
我们把块顶着空间限制多开一点就好了,亲测 \(T=10^3\) 就差不多了。
歌颂强大的分块算法吧
[KPC2019/AT4569]Connecting Cities
直接上 Boruvka 算法。首先不难想到将绝对值拆开,改成前后缀的最小值。然后对于一个连通块内的点,彼此不能被取到,于是可以想到线段树维护。时间复杂度是 \(O(n\log_2^2n)\) 。
杂题
[AGC001F] Wide Swap
转化、贪心、优化建图。 敬请移步正经题解。
转化,状态压缩,敬请移步正经题解 。
转化,生成树。
首先发现最终任意两个集合的交最多只有一个元素。这样可以避免环长为 2 的彩虹环。
然后考虑如何避免环长大于 2 的彩虹环。考虑将有同样的元素的集合之间连一条边,这样如果新图上存在环,则对应的原图上也存在彩虹环。
更进一步地,我们直接让点向所有包含它的集合连边。这样新图上有环同样对应原图上有彩虹环。因此我们就要求新图上的一个最大生成树即可。
非传统题
[CF1370F2]The Hidden Pair (Hard Version)
交互,敬请移步正经题解。
构造,敬请移步正经题解。
哲学计数
容斥,预处理,前缀和,敬请移步正经题解。
博弈问题
详见我专门的板块博弈题集合。
任务列表
待完成
[AGC012F] Prefix Median
[AGC004E] Salvage Robots
[AGC010C] Cleaning
[CF1119F]Niyaz and Small Degrees
[TopCoder]RainbowGraph
花神的数论题
[CF55D]Beautiful numbers
[CF1119F]Niyaz and Small Degrees
[雅礼集训2019 Day1]permutation
[BalticOI 2019 Day2]奥运会
[HDU4787]GRE Words Revenge
[51nod 1514] 美妙的序列
[CF329C] Graph Reconstruction
[CF455D] Serega and Fun
[CF487D] Conveyor Belts
[CF506D] Mr. Kitayuta's Colorful Graph
[[校内赛]物理题目解析电车]
[TJOI2013] 拯救小矮人 及其加强解法。
[[校内赛] 快递/[牛客2020多校赛第五场] Portal]
一万道莫反的题目
[CF1383C]String Transformation 2
待题解
[CF855G]Harry Vs Voldemort
[ARC101C] Ribbons on Tree
[CF840C]On the Bench
[AGC002F] Leftmost Ball
[AGC029E] Wandering TKHS
[六省联考2017]相逢是问候
[AGC013E] Placing Squares
[Code+#4]组合数问题2
[AGC003D] Anticube
[CF793G]Oleg and chess
[国家集训队]middle
[HEOI2016/TJOI2016]排序
[APIO/CTSC 2007]数据备份
[CF1051E] Vasya and Big Integers
[CF1025D] Recovering BST
[CF494C] Helping People
[LOCAL] 画画图
[CF804F] Fake bullions
[雅礼集训2019 Day5]Inverse
[POI2014]HOT-Hotels 加强版
[UVA] Hell on the Markets
[CF364D]Ghd
[AGC001F] Wide Swap
[Ynoi2019模拟赛]Yuno loves sqrt technology II
【UR #2】跳蚤公路
[HDU6792]Lady Layton and Stone Game
[HDU6799]Parentheses Matching 及其校内赛加强版
[HDU6791]Tokitsukaze, CSL and Palindrome Game
[HDU6820]Tree
[UOJ495]新年的促销
[HDU6826] An Easy Matrix Problem
[[校内赛] 异或/[牛客2020多校赛第五场] Graph]
一万道莫反的题目
[[校内赛0908] 排队]
[[校内赛0910] 充电]
[[校联赛0912] 舟游]
[[校联赛0912] 选课]
[[校联赛0919] 坚果]