2025.8做题笔记
qwq
洛谷P11364 [NOIP2024] 树上查询
有一个结论是 \(\text{LCA}(l,r)=\arg\min\limits_{i=l}^{r-1}\text{LCA}(i,i+1)\),可以用类似虚树证但我不会。
考虑对于每个 \(i,1\le i\le n\),找出最大的区间 \([l_i,r_i]\) 使得 \(\text{LCA}(l_i,r_i)=\text{LCA}(i,i+1),l_i\le i,r_i>i\),给这个区间带上一个权值 \(\text{dep}_{\text{LCA}(i,i+1)}\),每次询问要求的就是与询问区间交集大小至少为 \(k\) 的所有区间中权值的最大值。
询问区间 \([ql,qr]\) 和某个区间 \([l_i,r_i]\) 交集大小至少为 \(k\) 的充要条件是 \(qr\ge r_i\wedge qr-k+1\ge l_i\) 或 \(ql+k-1\le r_i\le qr\wedge r_i-l_i+1\ge k\),跑两遍扫描线就行。
min-max 容斥(并非题)
\(\min(S)=\sum\limits_{T\subseteq S}(-1)^{\lvert T\rvert+1}\max(T)\)
\(\max(S)=\sum\limits_{T\subseteq S}(-1)^{\lvert T\rvert+1}\min(T)\)
\(E(\min(S))=\sum\limits_{T\subseteq S}(-1)^{\lvert T\rvert+1}E(\max(T))\)
\(E(\max(S))=\sum\limits_{T\subseteq S}(-1)^{\lvert T\rvert+1}E(\min(T))\)
洛谷P3175 [HAOI2015] 按位或
拆位。
记 \(E(\min(S))\) 表示 \(S\) 里最早出现的位的期望时间,\(E(\max(S))\) 表示 \(S\) 最晚出现的位的期望时间,答案为 \(E(\max(U))\)
min-max 容斥化成 \(\sum(-1)^{\lvert T\rvert+1}E(\min(T))\),现在要求 \(E(\min(T))\)。
根据什么离散随机变量的几何分布(我不会),可以发现 \(E(\min(S))=\frac{1}{\sum\limits_{S\cap T\ne \varnothing}P(T)}\)。
把下面那坨再做个容斥,就变成了 \(E(\min(S))=\frac{1}{1-\sum\limits_{T\subseteq\complement_{U}S}P(T)}\)。
现在又要求 \(\sum\limits_{T\subseteq\complement_{U}S}P(T)\),相当于 \(\sum\limits_{i\vert j=i}P(j)\),做个 FWT 就行了。
洛谷P5643 [PKUWC2018] 随机游走
记根 \(rt=\) 题目中的 \(x\),\(E(\max(S))\) 表示走完 \(S\) 的期望时间,\(E(\min(S))\) 表示第一次走到在 \(S\) 里的点的期望时间。
做个 min-max 容斥,\(\max(S)=\sum\limits_{T\subseteq S}(-1)^{\lvert T\rvert+1}\min(T)\)。
设 \(f_{i,S}\) 表示从 \(i\) 开始第一次走到 \(S\) 的点的期望时间,有:$$f_{u,S}=\frac{1}{deg_u}(f_{fa,S}+\sum f_{v,S})+1$$
当 \(u\in S\) 时 \(f_{u,S}=0\)。
有一个很神秘的套路是设 \(f_{u,S}=a_u\times f_{fa,S}+b_u\),然后:
所以 \(a_u=\frac{1}{deg_u-\sum a_v},b_u=\frac{\sum b_v+deg_u}{deg_u-\sum a_v}\),注意当 \(u\in S\) 时,\(a_u=b_u=0\)。
因为根节点没父亲,所以 \(f_{rt,S}=b_rt\)。
设 \(mn_{S}=(-1)^{\lvert S\rvert+1}f_{rt,S}\),则询问的答案为 \(\sum\limits_{T\subseteq S}mn_{T}\),发现这玩意其实就是 FWT 的式子,直接做一遍就行,\(O(1)\) 查询。
洛谷P10982 Connected Graph
容斥一下。记 \(f_i\) 表示 \(i\) 个点的有标号无向图数量,\(g_i\) 表示 \(i\) 个点的有标号不联通无向图数量,答案为 \(f_n-g_n\)。
对于 \(f\),显然有 \(f_i=2^{\frac{i(i-1)}{2}}\)。
对于 \(g\),考虑枚举 \(1\) 号点所在的联通块大小,有 \(g_i=\sum\limits_{j=1}^{i-1}\binom{i-1}{j-1}(f_j-g_j)f_{i-j}\)。
洛谷P6846 [CEOI 2019] Amusement Park
有一个很厉害的转化就是如果转 \(x\) 条边后合法,那么转另外的 \(m-x\) 条边也合法,所以把这个图看成无向图,答案就是给边定向后是一个 DAG 的方案数乘 \(\frac{m}{2}\)。
用 \(f_{S}\) 表示若只保留 \(S\) 中的点和端点在 \(S\) 里的边,给边定向为 DAG 的方案数,考虑枚举入度为 \(0\) 的点的集合,再容斥一下,有 \(f_{S}=\sum\limits_{T\subseteq S,T 为独立集}(-1)^{\lvert T\rvert+1}f_{S\setminus T}\)。
枚举子集是 \(O(3^n)\),判断独立集是 \(O(2^nm)\)
洛谷P4389 付公主的背包
构造多项式 \(f_y(x)=\sum\limits_{i\ge0} x^{i\times v_y}=\sum\limits_{i\ge0}(x^{v_y})^i,F=\prod f_i\),那么 \(i\) 的答案为 \(F\) 中 \(x^i\) 的系数。
根据生成函数的经典结论,有 \(f_i(x)=\frac{1}{1-x^{v_i}}\),可以先把所有 \(f\) 取个倒数,乘起来后再取个倒数。
直接乘显然是不行的,时间会爆,考虑取个 \(\ln\) 加起来最后 \(\exp\) 回去。可以发现 \(\ln(1-x^v)=-\sum\limits_{i\ge 1}\frac{x^{v\times i}}{i}\),直接枚举倍数把系数加上去。
洛谷P5110 块速递推
注意到这题答案有循环节,长度为 \(10^9+6\)。
设 \(f(x)=\sum\limits_{n\ge1}a_nx^{n}\),然后推式子:
待定系数。设 \(\frac{A}{1-Bx}+\frac{C}{1-Dx}=\frac{x}{1-233x-666x^2}\),通分得 \(\frac{A+C-(AD+BC)x}{1-(B+D)x+BDx^2}=\frac{x}{1-233x-666x^2}\),用 wolfram 神力解得
继续推:
考虑求出 \(56953\) 在模 \(10^9+7\) 下的二次剩余,得到 \(188305837^2\equiv56953\pmod{10^9+7}\)。
注意到查询很多,不能直接快速幂求 \(B^n\) 和 \(D^n\),因此使用光速幂。
设置一个阈值 \(b\)。若要求 \(x\) 的幂次,预处理出 \(0\le i< b\) 的所有 \(x^i\) 和 \(x^{i\times b}\)。求 \(x^a\) 时,\(x^a=x^{a\bmod b}\times x^{\lfloor\frac{a}{b}\rfloor\times b}\)。这题可以让 \(b=2^{16}\)。
洛谷P4451 [国家集训队] 整数的lqp拆分
设 \(f\) 表示斐波那契数列,\(f_0=0\),\(F(x)=\sum\limits_{n\ge0}f_nx^n\),\(g_n\) 表示 \(n\) 的答案,\(G(x)=\sum\limits_{n\ge0}g_nx^n=1+\sum\limits_{n\ge1}g_nx^n\)。
枚举最后选的数,可以得到 \(g_n=\sum\limits_{i=1}^{n}f_i\times g_{n-i}\),因此 \(G(x)=1+\sum\limits_{i\ge1}(\sum\limits_{j=1}^{i}f_i\times g_{n-i})x^i=1+F(x)\times G(x)=\frac{1}{1-F(x)}=\frac{1}{1-\frac{x}{1-x-x^2}}=\frac{1-x-x^2}{1-2x-x^2}=1+\frac{x}{1-2x-x^2}\)。
可以发现这玩意跟 P5110 差不多。待定系数,令 \(A=\frac{1}{2\sqrt2},B=1+\sqrt2,C=-\frac{1}{2\sqrt2},D=1-\sqrt2\),则 \(\frac{x}{1-2x-x^2}=\frac{A}{1-Bx}+\frac{C}{1-Dx}\)当然是用 wolfram 解出来的。然后就能得到 \(g_n=A(B^n-D^n)=\frac{\sqrt2}{4}((1+\sqrt2)^n-(1-\sqrt2)^n)\)。
\(2\) 在模 \(10^9+7\) 下的二次剩余是 \(59713600\) 或 \(940286407\),随便拿一个就行。
洛谷P3600 随机数生成器
设值域上界为 \(X\),\(p_i\) 表示答案小于等于 \(i\) 的方案数,答案就是 \(\sum\limits_{i=1}^{X}i\times\frac{p_i-p_{i-1}}{X^n}\)。
有一个 trick 是把大于 \(x\) 的位置看成 \(1\),小于等于 \(x\) 的位置看成 \(0\)。转化后如果所有区间都至少有一个 \(0\),那么答案就小于等于 \(x\)。
设 \(g_i\) 为填 \(i\) 个 \(0\),\((n-i)\) 个 \(1\) 的合法方案数,那么 \(p_i=\sum\limits_{j=0}^{n}g_j\times i^j\times(X-i)^{(n-j)}\)。
可以发现直接求 \(g\) 不好做,考虑 dp。设 \(f_{i,j}\) 表示前 \(i\) 个位置填了 \(j\) 个 \(0\),位置 \(i\) 填 \(0\),且所有左端点小于等于 \(i\) 的区间都合法的方案。
考虑转移。对于所有跨过 \(i\) 的区间都是不必考虑的,因此只需要找到左端点最右的区间使得 \(l\le i,r<i\),就有转移 \(f_{i,j}=\sum\limits_{k=l}^{i-1}f_{k,j-1}\)。从 \(f\) 转移到 \(g\) 是类似的。
可以发现对于每个 \(i,j\),它转移对应的区间只和 \(i\) 有关,因此直接找的复杂度是 \(O(n^2)\),加个前缀和优化就能让转移也变成 \(O(n^2)\),预处理一下 \(i^j\) 就能做到整个题 \(O(n^2)\)。
洛谷P6798 「StOI-2」简单的树
记 \(v_u\) 为 \(u\) 子树中 \(c\) 的最大值,\(V_u\) 为 \(u\) 子树中 \(c\) 的非严格次大值,\(g(r,u)=\sum\limits_{i=1}^{r}f(i,u)\),则 \(query(l,r,u)=g(r,u)-g(l-1,u)\)。
可以发现求 \(g(r,u)\) 时,只有 \(1\sim u\) 上的点的 \(v\) 值被影响了,因此只考虑 \(1\sim u\) 上的点。
记 \(a_i\) 表示 \(i\) 子树中剔除了 \(c_u\) 的最大值,也就是不看 \(u\) 的最大值,如果 \(v_i=c_u\) 且 \(V_i<c_u\),则 \(a_i=V_i\),否则 \(a_i=v_i\)。可以发现,满足 \(a_i=V_i\) 的点在 \(1\sim u\) 上按深度从小到大是一段后缀。
考虑点 \(i\) 对 \(g(x,u)\) 答案的贡献,有 \(\left\{\begin{matrix}
\frac{x^2+c_i^2+x-c_i}{2}&c_i\le x, \\
c_i\times x&c_i>x.
\end{matrix}\right.\)
按照 \(a_i=v_i\) 或 \(V_i\) 分段后,每段单独二分出 \(c_i\le x\) 的后缀。
用 \(v_u\)、\(c_u\) 的和以及平方和。
洛谷P5339 [TJOI2019] 唱、跳、rap和篮球
拼好题。
先容斥一下。记 \(f_i\) 表示至少有 \(i\) 个连续段的方案数,也就是先固定 \(i\) 个,其它的随便放。
考虑放 \(i\) 个连续段,其它位置不管的方案数,这个随便 dp 一下就没了。
考虑如何解决长度为 \(n\) 的序列里填 \(1\sim 4\),\(i\) 最多填 \(a_i\) 个的方案数。
考虑生成函数的经典结论,答案就是 \(\prod\limits_{k=1}^{4}\left(\sum\limits_{i=0}^{a_k}\frac{1}{i!}x^i\right)\) 中 \(x^n\) 的系数,除阶乘是因为相同的数没顺序。因为范围比较小,所以可以暴力卷积。算出来后还要乘上 \(n!\)。
洛谷P4859 已经没有什么好害怕的了
简单题。
题面可以转化为糖果比药品能量大的组数恰好为 \(k\)。
记 \(f_i\) 表示组数至少为 \(k\) 的方案,\(g_i\) 表示组数恰好为 \(k\) 的方案,有 \(f_i=\sum\limits_{j=i}^{n}\binom{j}{i}g_j\),二项式反演得 \(g_i=\sum\limits_{j=i}^{n}(-1)^{j-i}\binom{j}{i}f_j\),则答案为 \(g_k=\sum\limits_{i=k}^{n}(-1)^{i-k}\binom{i}{k}f_i\)。
考虑怎么求 \(f_i\)。按照经典套路,可以先固定 \(i\) 组糖果大于药品的,剩下的随便选,这个把 \(a\) 和 \(b\) 从小到大排序后随便 dp 下就行了。