2024.9.30
Last Update:
Word Count:
Read Time:
Darth Vader and Tree *2200
首先考虑暴力。
设 表示距离根距离恰好为 的数量。转移为
但观察数据范围,发现 ,说明不同的 很少。
那么只需要对这些不同的 转移就行了。
设 ,那么转移为
这是一个常系数齐次线性递推方程,BM算法矩阵快速幂即可。
最终答案为 ,可以在矩阵里顺便维护一下。
复杂度
Vladik and cards *2200
容易想到状压。
但第一个条件感觉很难搞,没法记录每个元素出现次数,怎么办?
我们可以二分出所有的数字的最小出现次数 ,那么每个元素出现次数只能为 和 (经常在错解里想到这种思路,终于在这道题成为正解了)。
设 表示到第 个位置,数字出现状态为 时,出现次数为 的数的最大个数。
这么设状态是因为,一个数的出现次数只能为 和 ,那肯定让 的个数越多越好。
转移比较简单,看每个数字出现 次还是 次即可。
我们可以把每个数字出现的位置记录下来,方便转移。
注意每种数字必须连续,也就是出现过后就不能再转移了。
复杂度
Treeland Tour *2200
树上路径问题直接考虑点分治。
设当前分治重心为 ,我们求出从叶子往 走且以 结尾的 LIS 和 LDS。
这个东西怎么求呢?
每个点都只能从子树转移来,所以问题就是单点加子树查,弄个 dfn 序后线段树维护即可。
统计答案时,考虑包不包含 。
设 表示以 结尾的 LIS 长度, 表示以 结尾的 LDS 长度。
对 和 分别做前缀 和后缀 。
包含 :
不包含 :
然后完了?
显然没有,因为如果两条路径来自同一颗子树内就寄了。
那么线段树在维护时,记录最大值和次大值,以及来自哪棵子树即可。
统计答案时特判一下。
复杂度
Felicity’s Big Secret Revealed *2200
简单性质题。
不难发现答案 不会很大。因为 ,所以 。
那就考虑状压,设 表示这一刀切在 前,状态为 时的方案数。
转移就枚举上一刀切在哪。
转移为
把 组成的数去掉即可。
答案为
复杂度
Abbreviation *2200
唐唐唐,下次读题能不能读仔细点。
做了半个小时+看了半天题解才发现翻译里最后一句写着“至多进行一次操作”
绷不住了。
那就好做了。枚举缩哪一段区间即可。
具体的,我们可以先处理出 表示 和 向后匹配的最长长度。
然后枚举缩哪段区间,然后向后暴力缩就行了。
复杂度
代码可参考官方题解。
Three Pieces *2200
很厉害的一道题,完全没想出来。
考虑 dp。
设 表示当前在 ,已经填了 ,且当前是 0/1/2 棋子的最小花费。
但这个 dp 有一个问题:不知道转移顺序。
所以考虑用最短路转移。
转移分三种:
- 换棋子,代价为 inf+1
- 移动棋子,代价为 inf
- 填数(即 所在的数是下一个数),代价为 0
这里有一个 trick:因为还要求换的次数最小,所以可以设一个极大值,将移动棋子设为 inf,换棋子设为 inf+1,这样就可以做到双关键字了。
输出答案时,时间就是 ,换的次数就是 。
一共 个点, 条边。