2021.12.13 模拟赛
最近摆得太厉害了。
“讲过的题还不会?”
一开题就发现自己 A 了两道,大为震撼。然后发现是去年我爆零的一场比赛。
T1
先判一手相同。
\(B\) 矩阵出现超过 \(1\) 个 \(\texttt 1\) 的行 / 列是不能操作的。这些行 / 列中为 \(\texttt 1\) 的列 / 行也是不能操作的。
去掉不能操作的行 / 列,新的矩阵可以随意操作。由于 \(B'\) 中任意行 / 列 \(\texttt 1\) 的个数不超过 \(1\) 个,那么只要 \(A'\) 中存在入口 \(\texttt 0\),一定存在方案可以得到 \(B'\)。
数据水的很,代码写一半交上去就能过。
T2
考虑每个 \(p^k,p\in\mathbf{prime}\) 的贡献,也就是让求
根号分治:
-
对于 \(\le \sqrt n\) 的质数,暴力。
-
对于 \(> \sqrt n\) 的质数,其指数至多为 \(1\),也就是计算
\[\sum_{\substack{p\in\mathbf{prime}\\p>\sqrt n}}\left\lfloor\frac{n}{p}\right\rfloor \]整除分块,需要求的就是区间质数个数。
质数个数前缀和,考虑筛一类的 DP。设 \(F_i(n)\) 表示对于前 \(i\) 个质数,\(1\dots n\) 为质数或者 \(\mathrm{minp}>p_i\) 的数的个数,转移为
要求 \(p_i\le \sqrt n\)。复杂度就是 min_25 筛第一部分的复杂度,\(\mathcal O\left(\frac{n^{\frac 34}}{\log n}\right)\)。
具体实现还是需要写成非递归形式,对下标根号分治将 \(F\) 的空间降至 \(\mathcal O(\sqrt n)\)。(注意要从大到小枚举那 \(\sqrt n\) 个点值。)
T3
区间 DP,记录 \(f(l,r)\) 表示完全包含于 \([l,r]\) 的所有鱼的答案,枚举聚集点转移。