校内高质量模拟赛选做
「2020-02-14 省选模拟赛」同桌与室友 (mate)
- 注意到每个人最多连出两条边,因此形成的图要么是环,要么是链。链分两端颜色是否相同讨论即可。
「2020-02-14 省选模拟赛」传送 (teleport)
-
有显然的差分约束模型。实际上 dp 可以求出每个点的合法区间,最后若区间非空即有解。
-
注意到每花费 \(1\) 的代价即可使答案区间左右各扩大 \(1\),因此花费可简单计算。
「2020-02-14 省选模拟赛」生成树 (tree)
- 将绿边权值设为 \(x\),蓝边权值设为 \(y\),红边权值设为 \(1\),矩阵树定理之后的形式是关于 \(x, y\) 的二元多项式。答案即为系数的二维前缀和,二元插值即可求出。
「2020-02-17 省选模拟赛」序列 (seq)
- 倒序考虑 \(q\) 的组成。最后加入的数对可以通过分奇偶性区间极值得出。这样可以把原区间分为三个子区间,递归下去即可。子区间的数对必须在当前区间的数对之前选择,这样可以得到数对之间的偏序关系,求字典序最小的拓扑序即可。
「2020-02-17 省选模拟赛」进制 (hex)
-
第一问,注意到十六进制数的长度不超过 \(15\),预处理每种长度的数在序列中占多少长度可以判断位数。之后通过数位之间的整除、取模即可求得。
-
第二问,求出第一问后相当于小于某个数的所有数做数位统计,数位 dp 即可。
「2020-02-17 省选模拟赛」矩阵 (matrix)
-
设 \(f_{i,j}\) 表示有 \(i\) 行 \(j\) 列,其中每行都有涂黑的方案数。
-
\(\text{ans} = \sum \dbinom{n}{i}f_{i,m}\)
-
考虑两种转移:
-
新增一列。\(f_{i,j} \xleftarrow{+} (\dbinom{j}2+j+1)f_{i,j-1}\);
-
新增一列,以及若干行。考虑原来某列第一个位置的上一个,和最后位置的下一个位置,和新增的 \(i-k\) 个位置一共形成 \(i-k+2\) 个位置。那么相当于在 \(i+2\) 个位置中选出 \(i-k+2\) 个位置填数。 \(f_{i,j} \xleftarrow{+} \dbinom{i+2}{i-k+2}f_{k,j-1}\)。转移是卷积的形式,NTT 即可。
-
「2020-02-18 省选模拟赛」小 D 的奶牛 (cows)
- 先考虑 \(2^n\) 做法。记录每个点连出的点集,状压 dp 每个集合是否可行。
- 折半搜索。前一半需要统计子集中有多少个合法,可以 FWT;在后半搜索的时候直接求出对应的集合最大能是多少。
[「2020-02-21 省选模拟赛」遗迹探索 (strings) ]
一个串把中间的 SAD
计入答案后,只有前后缀两个字符有用,我们完全可以把信息压缩成:前缀 A
的出现次数,前缀 AD
的出现次数,后缀 S
的出现次数,后缀 SA
的出现次数。如果不存在单独的 A
,则贡献是好算,注意一些串可能同时存在匹配的前后缀,要去除用的所有串都是同一类的情况。考虑单独的 A
,枚举其被用了几个,把一些长度为 \(1\) 的前/后缀拼成长度为 \(2\) 的前/后缀即可
「2020-02-21 省选模拟赛」基因进化 (reverse)
对于可翻转前缀 \([1,i]\),我们能从其最优答案推出下个可翻转前缀 \([1,j]\) 的最优答案。直接维护这个最优答案,需要支持头插入、尾插入、翻转字符串,使用 hash 二分判断字典序,双端队列维护 hash 值。
「2020-02-21 省选模拟赛」城市破坏 (disconnected)
-
如何判断删去若干边之后,图能否被分成两个连通块?
-
每条边随机一个权值,点权为相邻的边的边权的异或和,满足所有点权为 \(0\)。若删去的边的边权异或和为 \(0\),则被分成两个连通块;否则不是。
-
\(2^c\) 枚举删掉的边集,若异或和为 \(0\) 则不连通。
-
关于边权,dfs 树上,非树边随机,树边构造即可。
「2020-02-25 省选模拟赛」小 B 的班级 (class)
如果人的位置确定,点 \(u\) 的父边最多能为 \(\min(siz_u, n-siz_u)\) 个点对产生贡献,并且显然可以取到上界。那么对所有方案计数只需分别枚举子树内男、女人数即可,直接做是 \(O(nm^2)\) 的。实际上只需要枚举子树内总人数即可。
[「2020-02-25 省选模拟赛」小 B 的环 (loop)]
倍长断环成链,如果相邻字符相同则这两个位置不会同时出现,这样就把字符串分割成若干段独立子串。删除长度为 \(k\) 的串,等价于保留长度为 \(n-k\) 的串;存在合法的长度为 \(k\) 的串,等价于 \(\exist i,s_{i} \ne s_{i+k-1}\),显然补集转化,不存在合法的长度为 \(k\) 的串,等价于 \(\forall i,s_{i} = s_{i+k-1}\),即存在长度为 \(len-k+1\) 的 border。求串的所有 border,kmp 即可。
[「2020-02-25 省选模拟赛」小 B 的农场 (farm) ]
分治,求所有跨过中线的答案。以竖中线为例,枚举上边界,线段树维护每个下边界的答案,则中线两边显然分别考虑,且可选长度自上而下构成一个逐渐“缩紧”的形状,用单调栈维护。注意边界。
注意到答案大等于 \(2\max(W,H)+2\),所以只需要横着竖着各分治一次即可。
[「2020-02-28 省选模拟赛」小 B 的棋盘 (chess)]
无穷解当且仅当 \(k\ge n\),比较显然。否则前 \(k+1\) 个点与后 \(k+1\) 个点至少存在一对匹配点,否则无法增加 \(k\) 个点使对称。枚举匹配点对,即可求出对称中心,暴力判断是否存在匹配点即可。可以排序后双指针优化常数。
[「2020-02-28 省选模拟赛」小 B 的夏令营 (camp)]
等价于相邻两行剩余区间有交。暴力 dp,设 \(f_{i,l,r}\) 表示考虑前 \(i\) 行,第 \(i\) 行剩余区间为 \([l,r]\) 的方案数,转移枚举上一行所有有交的区间,再乘上剩下 \([l,r]\) 的概率。需要优化状态。设 \(g_{i,j} = \sum \limits_{k\le j} f_{i,k,j}\),发现 \(f\) 的转移方程可以用 \(g\) 表示,然后再求一个前缀和即可得到 \(g\) 的转移式,可以前缀和优化。
「2020-02-28 省选模拟赛」小 B 的图 (graph)
把询问离线下来排序。当 \(x\) 很充分小时,我们优先选用 \(k+x\) 的边;随着 \(x\) 增大,我们会选择把一些边替换成 \(k-x\) 的边。但是两种边使用的集合是不变的——一定是各自子图上最小生成树边。所以先求出 \(k+x\) 边的最小生成树,枚举每一条 \(k-x\) 边,维护路径上边权最大值,可以求出替换时的 \(x\) 值。注意到如果两条 \(k-x\) 边对应路径有交集,那么一定是 \(k\) 小的先替换,并且不会再被替换。所以替换后要在最小生成树上删除,边权赋成负无穷。LCT 维护最小生成树即可。
「2020-03-31 省选模拟赛」积性函数求和 (sum)
算法 1
\(f(p^k) = 2k+1\),Min25 筛板子题。
算法 2
口胡的。
\(f(n) = \sum \limits_{d|n} \sum\limits_{p|n}[(p,d)=1] = \sum\limits_{t|n} \mu(t)\sigma_{0}^2(\dfrac{n}t)\)
\(\sum\limits_{i=1}^n f(i) = \sum\limits_{i=1}^n \sum\limits_{t|i} \mu(t)\sigma_{0}^2(\dfrac{i}t) = \sum\limits_{d=1}^n \mu(d) \sum\limits_{i=1}^{n/d}\sigma_{0}^2(i)\)
如果可以使用杜教筛求出 \(\sigma_0^2\) 的前缀和,那么由于我们只需要其在形如 \(\lfloor\dfrac{n}{x}\rfloor\) 处的前缀和,一遍杜教筛即可解决问题。感觉很对。
算法 3
搬运官方题解。
\(f(n) = \prod\limits_{i=1}^{k}(2\alpha_i+1) = \sum\limits_{S\subseteq\{1,2,3\dots ,k\}} 2^{|S|}\prod\limits_{i\in S} \alpha_i = \sum\limits_{d|n}2^{\omega({d})} = \sum\limits_{d|n}\sum\limits_{p|d}\mu^2(p)\)
所以
带回原式
有两个比较经典的结论
则 \(\sum \mu^2\) 和 \(\sum \sigma_0\) 的前缀和都可以在不超过 \(O(\sqrt n)\) 的时间复杂度内求出。因此可以预处理前 \(\sqrt n\) 个值,剩下的暴力做,复杂度分析和杜教筛是一样的。
「2020-03-31 省选模拟赛」游戏 (game)
先手必胜:对手存在一张牌,使得其比先手所有牌都小。
后手必胜:对于自己的每一张牌,都有一张先手的牌比它小。
剩下都是平局。
「2020-03-31 省选模拟赛」子串排列 (permutation)
把询问结点定位到后缀树上,建出虚树贪心。维护每个子树的答案,把所有子结点的答案按照字典序排序后加入,最后再加入当前子树根的串。排序直接暴力排(在这里想了挺久),重儿子长度不会计入,复杂度是对的。