清华集训 2016 选做

清华集训 2016 选做

【清华集训】如何优雅的求和 [* easy]

给定多项式 \(f(x)\),其次幂为 \(m\),你需要计算:

\[\sum_{k=0}^n f(k)\binom{n}{k}x^k(1-x)^{n-k} \]

答案对 \(998244353\) 取模。

\(1\le n\le 10^9,1\le m\le 2\cdot 10^4,0\le a_i,x<998244353\)

\(\rm Sol:\)

将次幂拆开,转为求:

\[\sum_{k=0}^n k^i \binom{n}{k}x^k(1-x)^{n-k} \]

将通常幂转为下降幂通过斯特林数实现:

\[\begin{aligned} &\sum_{k=0}^n \sum_{j=0}^i \begin{Bmatrix}i\\j\end{Bmatrix}j!\binom{k}{j} \binom{n}{k}x^k(1-x)^{n-k} \\&=\sum_{j=0}^i \sum_{k=0}^n\begin{Bmatrix}i\\j\end{Bmatrix}n^{\underline{j}}\binom{n-j}{k-j}x^k(1-x)^{n-k} \\&=\sum_{j=0}^i \begin{Bmatrix}i\\j\end{Bmatrix}n^{\underline{j}}\sum_{k=0}^n\binom{n-j}{k-j}x^{k-j}(1-x)^{(n-j)-(k-j)}\times x^j \\&=\sum_{j=0}^i \begin{Bmatrix}i\\j\end{Bmatrix}n^{\underline{j}}x^j \end{aligned}\]

那么我们直接优雅的插值,优雅的递推斯特林数,然后优雅的求和即可。

另一种处理方法是考虑为啥给了点值。

我们考虑多项式 \(f(k)\) 的牛顿级数。

形如:

\[f(k)=\sum_{i=0}^m \binom{k}{i}f_i \]

我们现在已知点值序列,所以所求的系数序列可以被二项式反演描述:

\[f_n=\sum_{i=0}^n \binom{n}{i}(-1)^{n-i}f(i) \]

所以所求即:

\[\begin{aligned} &\sum_{k=0}^n f(k)\binom{n}{k}x^k (1-x)^{n-k} \\&=\sum_{i=0}^m f_i\sum_{k=i}^n \binom{k}{i}\binom{n}{k}x^k (1-x)^{n-k} \\&=\sum_{i=0}^m f_i\sum_{k=i}^n \binom{n}{i}\binom{n-i}{k-i}x^{k-i}\times x^i(1-x)^{n-k} \\&=\sum_{i=0}^m f_i\binom{n}{i}x^i \end{aligned}\]

于是可以休闲 NTT/brute force 把 \(f_i\) 求出来,然后直接优雅的计算答案即可。

emmm 2e4 为啥 \(m^2\) 不能过啊...为啥不开 \(1e5\),这样我就死心了 TAT

如何优雅的二项式反演:

\[f_n=\sum_{i=0}^n \frac{n!}{i!(n-i)!}(-1)^{n-i}f(i) \]

\[\frac{f_n}{n!}=\sum_{i+j=n} \frac{f(i)}{i!} \times \frac{(-1)^j}{j!} \]


【清华集训2016】组合数问题 [* hard]

  • Lucas 定理,数位 dp

多组询问,每次给定 \(n,m,k\),保证 \(k\) 为质数

求有多少对 \((i,j)\) 满足:

\[\binom{j}{i}\mod k=0 \]

\(\rm Sol:\)

注意到 \(k\) 非常小,由 \(\rm Lucas\) 定理,我们知道其等价于:

\[\binom{j}{i}=\binom{j\%k}{i\%k}\times \binom{j/k}{i/k} \]

如此往复下去,我们发现一对 \(i,j\) 满足 \(\binom{j}{i}\)\(k\) 的倍数等价于 \(i\)\(j\)\(k\) 进制下存在至少一位满足 \(i> j\)

于是我们可以考虑设计一个 \(dp\) 有统计有多少对 \(i,j\) 满足 \(i\le j\) 且有 \(k\) 进制下 \(i\) 均小于等于 \(j\) 的方案数。

\(f_{i,0/1,0/1,0/1}\) 表示当前 \(dp\) 到第 \(i\) 位,\(n\) 上是否受到限制,\(m\) 上是否受到限制。


【清华集训2016】Alice和Bob又在玩游戏 [* easy]

Alice 和 Bob 又在玩游戏。

\(n\) 个节点,\(m\) 条边 \((0≤m≤n−1)\),构成若干棵有根树,每棵树的根节点是该连通块内编号最小的点。

Alice 和 Bob 轮流操作(Alice 先手),每回合选择一个没有被删除的节点 \(x\),将 \(x\) 及其所有祖先全部删除,不能操作的人输。

需要注意的是,树的形态是在一开始就确定好的,删除节点不会影响剩余节点父亲和儿子的关系。

假设 Alice 和 Bob 都足够聪明,问 Alice 有没有必胜策略。

\(\rm Sol:\)

找一种方式来快速计算 sg 值。

考虑一棵子树,将其 sg 值统计在其最上部的节点处,设 \(f_u\) 表示 \(u\) 为根子树的 sg 值,设 \(g_u\) 为除去 \(u\) 之外的其他子树的 sg 值的异或和,那么容易得到删去节点 \(x\) 对于答案的影响为:

\[\bigoplus_{x\in u.fa} g_x\oplus f_x \]

当然如果 \(x\) 为 root 那么其对答案的贡献则不包含 \(f\)

如果设 \(w_x\)\(x\to root\) 的路径上的 \(g\oplus f\) 的异或和,那么显然 \(sg_{rt}\)\(w_x\) 中没有出现过的数。

然而单次转移的时候需要给所有子树异或上 \(g_x\),然后再求 \(\rm mex\),然后再异或上 \(f_x\),处理起来显然非常麻烦。

不过我们实际上只需要内部是否满序这个性质,相同权值我们只需要插入一遍,这样就可以查询 \(\rm mex\) 了,集体异或上权值直接打异或标记即可,复杂度 \(\mathcal O(n\log n)\),当然要写一个 01trie 合并。


【清华集训2016】温暖会指引我们前行 [* easy]

给定一张图,每条边有两个属性,温度 \((f)\) 与代价 \((w)\),定义 \(u\to v\) 的最温暖的路径为一条路径经过若干条边,且其中温度最低的边的温度尽可能大,次低的尽可能大,依次类推(可以认为是字典序比较,但是认为空串的字典序最大)

支持以下三种操作:

  • 加入一条边
  • 修改一条边的代价 \(w\)\(w'\)
  • 查询 \(u\to v\) 的最温暖的路径的代价权值和。

不允许经过重复路径,对于每组查询输出答案。

\(\rm Sol:\)

保证了温度不同,保证了字典序比较,那么我们就只需要维护最大生成树吧。

然后拆边为点,是不是很 easy 呢?


【清华集训2016】汽水

给定一棵大小为 \(n\) 的树,常数 \(k\),边有边权,找一条路径,使得这条路径的平均边权尽可能接近 \(k\),输出差值的绝对值向下取整的结果

\(n\le 5\cdot 10^4,w_i,k\le 10^{13}\)

\(\rm Sol:\)

先把边权都减去 \(k\) 变成使得平均边权最小。

\[-mid<\frac{w_1+w_2}{x_1+x_2}<mid \]

然后两类讨论,然后莽点分治,写一个 two-point。复杂度为 \(\mathcal O(n\log^2 n\log w)\),然后常数看着不是很大(存疑)?


[清华集训2016]你的生命已如风中残烛 [* hard]

\(n\) 个特殊牌和 \(m-n\) 张普通牌,有一个长度为 \(m+1\) 的序列,最后一个元素固定为 \(0\),其他元素编号为 \(1\sim m\),每张特殊牌有一个特殊的权值 \(w_i\) 表示获得了其之后可以摸 \(w_i\) 张牌,保证 \(\sum w=m\),初始您获得第 \(1\) 张牌,求所有 \(m!\) 种方案中使得您摸完牌的方案数。

\(m-n\ge 4,n\le 40,w_i\le 10^5\)

Solution

设初始值为 \(1\),那么问题等价于对于任意一个位置有前面的数的前缀和 \(\ge\) 其。(所有数均有标号)

即设 \(pre_i=\sum w_j[j\le i]\),那么有 \(pre_{i-1}\ge i\)

然后将所有数的 \(w\) 减去 \(1\),等价于 \(pre_{i-1}\ge 1\)

我们认为初始值为 \(0\),问题等价于 \(\forall i,pre_i\ge 0\)

接下来需要一个引理。

\(\mathbf{Raney}\) 引理

对于整数序列 \(\{a\}\),设 \(S_i\) 表示其前缀和,若 \(S_n=1\),那么在 \(a\) 的所有循环移位中,恰好有一个序列 \(a'\) 满足所有前缀和均大于 \(0\)

  • 可以看具体数学证明。

我们发现计数序列是很难的,我们考虑计算合法的圆排列的数量。

等价于计算所有可能的圆排列的本质不同的断环的方案数。

我们考虑在开头补一个 \(+1\),那么他就变成了 Raney 引理了。

然而麻烦的是我们无法确定 \(+1\) 是否一定在开头,所以这个题还是不可做。

那么考虑给原序列补充一个 \(-1\),然后计算所有前缀和都大于等于 \(0\),全局和为 \(-1\) 的圆排列数。

由于最后一个一定是 \(-1\),这样每个合法的圆排列对答案的贡献都是 \(1\)

然后类似于 Raney 定理可以说明每种圆排列的轮换只有一个合法。

然后 \(m+1\) 个数本质不同的圆排列数为 \(m!\),然后最后一个 \(-1\) 是任意的,我们要规定他只能是我们加入的 \(-1\),不难注意到每种 \(-1\) 结尾的方案并不本质区别,所以直接除以 \(m-n+1\)

答案就是 \(\frac{m!}{m-n+1}\)


【清华集训】石家庄的工人阶级队伍比较坚强 [* easy]

给定 \(m\),然后令 \(n=3^m\),给定数组 \(f_{0,0},f_{0,1}...f_{0,3^m-1}\)

给定数组 \(b\),然后定义卷积:

\[f_{k,x}=\sum_{y}f_{k-1,y}b_{u,v} \]

其中 \(u\) 定义为 \(W(x,y)\)\(v\) 定义为 \(L(x,y)\)

其中 \(W(x,y)\) 被定义为将三进制的每一位进行比较,出现一组 10/21/02 就累加一次贡献,\(L(x,y)\) 定义为 \(W(y,x)\)

你需要计算 \(f_{t}\)\(t\) 给定。

答案对 \(p\) 取模,保证不存在 \(x,y\) 满足 \(\frac{1}{x}+\frac{1}{y}=\frac{3}{p}\)

\(m\le 12,t\le 10^9,p\le 10^9\)

Solution

考虑三进制不退位减法:

\[\begin{matrix} 0\oplus 0=0&0\oplus 1=2&0\oplus 2=1 \\1\oplus 1=0&1\oplus 2=2&1\oplus 0=1 \\2\oplus 2=0&2\oplus 0=2&2\oplus 1=1 \end{matrix}\]

我们发现结果为 \(1\) 等价于 win,结果为 \(2\) 等价于 lose

\(bit_k(x)\) 表示 \(x\) 中的 \(k\) 的数量。

那么我们有转移形如:

\[f_{k,x}=\sum_y f_{k-1,y}b_{bit_1(x\oplus y),bit_2(x\oplus y)} \]

不难发现贡献实际上只和 \(x\oplus y\) 相关。

\(\odot\) 表示三进制不进位加法,那么不难发现:

\[f_{k,x}=\sum_{y\odot z=x} f_{k-1,y}b_{z} \]

于是相当于计算 3 进制下异或卷积的 \(k\) 次幂。

我们搞出 FWT 的点值即可处理了。

注意到 \(k\) 进制 FWT 相当于在做循环卷积,这样我们只需要将给 \(k\) 进制单位根代入进去即可。

具体式子:

\[FWT(i)=\sum_{j=0} c(i,j)A_j \]

\[FWT(i)=\sum_{j=0}^{k-1} c(i_{\mathbf{M}},j)\sum c(i',j')A_{j'+j\times k^{\mathbf{M}}} \]

\[FWT(i)=\sum_{j=0}^{k-1} \omega_{k}^{i_{\mathbf{M}}j}\sum c(i',j')A_{j'+j\times k^{\mathbf{M}}} \]

这样递归即可,由于只需要乘以单项式,所以复杂度是 \(\mathcal O(k^{m+3})\) 的。

由于要次幂一下,会掉精度,所以只能扩域,我们找一个代数单位来表示 \(\omega_3\)

根据单位根的性质,我们注意到 \(\omega_3^2+\omega_3+1=0\),这样的话就有 \(\omega_3^2=-\omega_3-1\)

这样我们先相当于拿着 \(ax^2+bx+c\) 类型的多项式在模(?)上做运算,最后我们再把 \(a\) 表示成 \(b,c\) 相关消一消。

  • 坑:这个模数保证了 \(3\) 存在逆元,但是不能直接套质数情况的求法...

然后发现这个题卡这个做法,然后你会发现没必要 FWT 的时候取模,所以可以最后取模。

posted @ 2020-10-08 00:12  Soulist  阅读(365)  评论(3编辑  收藏  举报