!114514

发布时间 2023-07-24 22:06:21作者: henrici3106

\(S_m(n) = \sum\limits_{i = 0}^{n - 1}i^m = \dfrac{1}{m + 1}\sum\limits_{i = 0}^{m}B_{m + 1 - i}\dbinom{m+1}in^i\),注意求和没有 \(B_0\)

CF923D Picking Strings

经过手玩发现, B 和 C 等价,A 可以转化为 BB,B 等价于 AB。

于是先把所有极长的 AB 连续段缩起来,凡是后面有 B 的 A 连续段都可以被消掉,只用考虑最后一段。且注意到 B 的数量只能增加,若 \([l, r]\) 中 B 的数量 > \([l_2, r_2]\) 中无解。

若第一个 A 的数量 < 第二个 A 的数量无解。若两个区间末尾 A 模 3 相同,若第一个存在 A 就可以把 B 不断 + 2,因此若两个 B 的奇偶性不同无解。若第一个不存在 B 但第二个存在 B 也无解。

直接判断,\(\mathcal O(n + q)\)

CF578E Walking!

将题意转化为:将原序列划分成若干子序列,每个子序列内部 01 交替,然后将所有子序列拼在一起,使得交界处也是 01 交替。最小化子序列的个数 - 1。

显然可以贪心解决第一问,能放就放,不能放就新建一个子序列。

对于第二问,求出首尾分别为 00,01,10,11 的子序列个数。若只有 00 和 11 显然可以直接拼(个数相等且最多只有一个)。若存在 01 和 10,将最后一个位置更靠后的一个数划分到另外一组就行。

CF568E Longest Increasing Subsequence

*3000 ?

\(cnt_i\) 表示 \([1, i]\) 中 -1 个数,\(w_i\) 表示 \(\leq i\) 的可以填充的数的个数,则:

\(dp_i = \max\limits_{j < i, a_j < a_i} dp_j+\min(cnt_{i - 1} - cnt_j, w_{a_i - 1} - w_{a_j})\)

拆开 \(\min\) 后是一个三维偏序,直接做即可,容易记录方案。

CF1271F Divide The Students

注意到可行解中一定存在一组中的某一项是被占满的,否则可以不断调整(怎么都放不满除外)

考虑枚举这个组,设为 111 的第一组,那么除去只选了一组的人外,包含这个组的有三个,考虑枚举前两个,那么就可以唯一确定最后一个数在当前组选的个数,对于剩下 11 显然可以贪心找到空余最多的一组填充。

CF573E Bear and Bowling

什么阴间结论。

结论是:对于 \(dp_{i, j} = \max(dp_{i - 1, j}, dp_{i - 1, j - 1} + ja_i)\) 的转移,必然存在一个分割点 \(p\),使得 \(p\) 之前的都不变,\(p\) 之后的都取到 \(a_i\)

结论的证明可以打表得到,那么直接二分求 \(p\) 即可,在 \(p\) 之后的需要区间加一次函数,可以用平衡树打标记实现。

CF1661F Teleporters

显然相邻的两个传送点可以分开考虑,设 \(f(len, x)\) 表示在 \([0, len]\) 中额外放 \(x\) 个传送点的方案,取到 \(\left\lceil \dfrac{len}{x+1}\right\rfloor\) 距离的有 \(len \bmod(x+1)\) 个,\(\left\lfloor\dfrac{len}{x+1}\right\rfloor\) 的有 \(x+1 - len \bmod (x+1)\) 个,其差分 \(\dfrac{1}{x(x+1)}\) 是单调不增的,因此 \(f(len, x)\) 是关于 \(x\) 的凸函数。而答案就是这 \(n\) 个凸函数的 Minkowski 和 \(\leq m\) 的第一个位置。

考虑二分最后的斜率 \(k\),于是对每个 \(len\) 都要取 $ \geq f(len, x - 1) - f(len, x)$ 最后一个数,当和 \(\leq m\) 时停止,此时再 chk \(k+1\) 就能得到哪些取到的斜率 \(k\)

CF559E Gerald and Path

考虑离散化区间后 dp,将所有线段按照中点排序,设 \(dp_{i, j}\) 表示考虑到前 \(i\) 个线段,目前覆盖的右端点是 \(j\)

将线段看做若干个小区间的和,当 \(i\) 向右扩展时 \(dp_{i, r_i} \leftarrow dp_{i - 1, p}+r_i - p\),否则需要对 \(i - 1\) 之前的方向进行讨论,令 \([k, i - 1]\) 的区间全部取右边,那么就有转移 \(dp_{i, R} \leftarrow dp_{i - 1, l_i} +R - l_i\)

时间复杂度 \(\mathcal O(n^2)\)

CF516E Drazil and His Happy Friends

\(g = \gcd(n, m)\),显然编号为 \(i\) 的男生和 \(j\) 的女生能一起玩当且仅当 \(i \equiv j (\bmod g)\),于是可以分成 \(g\) 组,每一组都是独立的。

P8261 [CTS2022] 袜子

半平面数点就是【UNR #4】己酸集合。做法是取块长 B 对序列分块,每块先将两两点的直线按照斜率排序,维护随着斜率变化的相对顺序(满足条件的一定是一个前缀)。最开始按照 \((x,y)\) 排序,表示当 \(k = -\infty\) 时左下的点是最可能满足条件的。若两个 \((x_i, y_i), (x_j, y_j)\),当 \(k \leq \dfrac{y_j - y_i}{x_j - x_i}\)\(i\)\(j\) 优秀,否则 \(j\)\(i\) 优秀。于是 \(>k\) 时,若 \(i\) 还比 \(j\) 优秀,就把 \(i, j\) 的在数组里面的顺序交换(重要性质:每次交换的都是相邻两个数),每次二分一个前缀即可。时间复杂度 \(\mathcal O(n\sqrt q\log n)\)

对于本题,考虑根号分治,当某一个颜色个数 \(> B\) 时直接对这个颜色拉出来做上面的过程将结果相加即可。处理的次数显然不超过 \(\dfrac n B\) 次。

否则先将块的大小填充为 \([B, 2B)\) 之间,每种颜色只在一个块中出现,可以一起统计,每个点维护 \(\sum cnt, \sum cnt^2\),由于交换的都是相邻两个数,变化是容易计算的。

时间复杂度仍然是 \(\mathcal O(n \sqrt q \log n)\)

CF1085G Beautiful Matrix

枚举字典序第一个不同的位置 \((i, j)\) 的值 \(b_{i, j}<a_{i, j}\)\(i+1\) 行之后的方案其实就是错排方案 \(f_n = (n - 1)(f_{n - 1}+f_{n - 2})\)。对于 \(i\) 行的 \([j+1, n]\) 中的数,先选出它们能填的数与上一行(若 \(i = 1\) 忽略)的交集大小,设为 \(cnt\),那么有且仅有这 \(cnt\) 个数会受到上一行的限制,不妨把它们放在最前面,设 \(f_{i, j}\) 表示 \(i\) 个数放在有 \(j\) 个特殊限制的格子方案,显然可以容斥计算 \(f_{i, j} = \sum\limits_{k = 0}^{j}(-1)^k\dbinom k j (i - k)!\)。不过 \(\mathcal O(n^3)\),考虑递推,枚举 \(i\) 位置放得是有无限制的数,可以得到 \(f_{i, j} = f_{i - 1, j - 1} j+f_{i - 1, j}(i - j) \ \ \ (i \neq j)\),否则 \(f_{i, j} = (i - 1)(f_{i - 1, i - 1}+f_{i - 2, i - 2})\)。注意一定不要将错排和 \(f\) 分开转移 !!!!1。然后就 \(\mathcal O(n^4)\)

先考虑得到 \(a_{i - 1, j+1 \dots n}\) 中不在 \(a_{i, 1 \dots j - 1}\) 的个数,然后特殊考虑 \(w < a_{i, j}\) 的取值,若 \(w \in {a_{i - 1, j+1 \dots n}}\) 就要把 \(cnt\) 减 1,因此可以用两个树状数组维护 \(w = x\) 时是否 -1 的个数,具体细节略。时间复杂度 \(\mathcal O(n^2 \log n)\)

CF1835F Good Graph

3500*

根据 Hall 定理,若二分图存在完美匹配,则对于所有 \(S \subseteq L, |N(S)| \geq S\) ,反之成立。若不存在完美匹配就随便找一个未匹配点不断 DFS,最后得到的 \(S\) 一定满足 \(|S| > |N(S)|\),于是 NO 就做完了。

考虑怎么构造一个二分图使得和原图的 tight 集合一一对应。考虑将 tight 集合划分成若干个极小 tight 集合,使得任意 tight 集合可以由这些极小 tight 集合合并得到,考虑从点的角度出发找到包含它的 tight 集合,这样只要两个二分图的点的 tight 集合相等即可。

对于找到给定点的 tight 集合和上面的 DFS 一样,不过我们可以把这个过程看做 DAG 的形式,即对于原图上的 \(x \to y\),若 \(y\) 不是 \(x\) 的匹配,连有向边 \(x \to match_y\),则 \(x\) 的 tight 集合为 DAG 上的可达点。

注意这不是个 DAG,于是先强联通分量缩一下变成 DAG,由于新图不一定是原图的子图,对于 SCC 中的点直接找边数最小的即可,也就是连成环,且若存在 \(x \to y, y \to z\),若 \(x \to y\) 就可以把 \(x \to y\) 删掉,即 \((x, y)\) 这条新边能保留当且仅当 \(x\) 能到达的点与能到达 \(y\) 的点无交,用 bitset 维护正反的传递闭包即可。

时间复杂度 \(\mathcal O(\dfrac{n^3}w)\)

P1393 Mivik 的标题

萌萌题,建议评红。

\(dp_i\) 表示 S 在 \(i\) 处结尾的概率,设 \(pb = m^{-|S|}\)\(S\) 的所有 border 集合为 T,则有转移:\(dp_i = pb - \sum\limits_{p \in T} dp_{i - p}m^{-p}-\sum\limits_{j = 1}^{i - |S|}dp_jpb\)

\(F(x) =\sum\limits_{i}dp_ix^i, G(x) = \sum\limits_{i\geq |S|}x^ipb, H(x) = \sum\limits_{p \in T}m^{-p}+\sum\limits_{i \geq |S|}pb\),则 \(F = G - HF \rightarrow F = \dfrac{G}{H+1}\),多项式求逆即可。