【省选模拟】4 月
4.8
01串
树上路径
DP。设 \(f[u,0/1/2/3]\) 为 子树 \(u\) ,\(u\) 向下有一条长为 \(0/1/2/3\) 的链的答案,转移时需要拼接 \(1,3\) 和 \(2,2\),需要再开一个数组表示前面子树剩下 \(i\) 条长为 \(1\) 或 \(3\) 的链的答案,转移复杂度为度数的平方。结论:随机 \(1,-1\) 的序列前缀和最大值为 \(\sqrt{n}\) 级别。因此把出边 shuffle
后只考虑尽量大的 \(i\) 即可,时间复杂度 \(O(n\sqrt{n})\)
思路考场上想的差不多, 但实现很恶心,常数&码量都爆炸,我果然只会背板
4.7
星际广播
枚举最后变成的字符,给每个位置赋权 \(0,1\),问题变为 \(m\) 个长为 \(l\) 的区间能覆盖的最大权值和
暴力 DP 是 \(O(n^{2})\) 的,根据实现可以获得 60~68pts。设 \(x\) 个区间的答案为 \(f(x)\),那么 \((x,f(x))\) 构成上凸包,可以 wqs 二分。简证凸性:记第 \(i\) 个区间新覆盖的权值为 \(c[i]\),那么 \(c[i]\ge c[i+1]\),否则调换更优
4.6
Fable
ycx 的极简做法:\(k\) 轮冒泡排序后最小的元素一定是 \(\min_{i=1}^{k+1}\{a_{i}\}\),次小的则是前 \(k+2\) 个元素中次小的,甚至可以做到 \(O(n)\)
Fiend
看到奇加偶减考虑构造行列式,不难得到 \(a_{i,j}=[l_{i}\le j][j\le r_{i}]\)
发现每行都是一段连续的 \(1\),考虑找到该列有元且右端点最小的行,用该行消元后仍然满足每行是连续的 \(1\)。对于每个左端点,用可并堆维护对应的右端点即可
维护主元与行号的双射即可解决交换行值取反
4.3
Max (CSA Expected Max)
\(m\) 很小,可以状压决策集合,逐个添加元素。
设 \(f[i,s,j]\) 为第 \(i\) 个元素在且仅在操作集合 \(s\) 中被加,值为 \(j\) 的概率;\(g[i,s,j]\) 为前 \(i\) 个元素占用了操作集合 \(s\),最大值为 \(j\) 的概率
枚举 \(\text{highbit}(s)\) 给 \(i\) 加了多少可以 \(O(c^{2}m2^{m})\) 计算 \(f[i]\),预处理 \(f[i,s],g[i,s]\) 前缀和,枚举子集可以 \(O(cm3^{m})\) 转移到 \(g\)
Paint (ARC063F)
一个比较简洁分治做法,较线段树做法常数和码量都更小
两层分治枚举 \(x,y\) 上的中线,统计跨过中线的矩形。求出每个左/右边界对应的上下边界,通过旋转坐标系使得矩形右上角位于右上区域。下边界在右下区域可以单调指针求出左边界;下边界在左下区域可以单调队列维护左边界
不难发现答案下界为 \(2(\max(w,h)+1)\),很难想到不跨过 \(\frac{w}{2},\frac{h}{2}\) 的矩形周长上界为 \(2(w+h)\),因此答案一定跨过 \(\frac{w}{2}\) 或 \(\frac{h}{2}\),可以省掉一个分治。时间复杂度 \(O(n\log n)\)