清华集训 2016 选做
清华集训 2016 选做
【清华集训】如何优雅的求和 [* easy]
给定多项式 \(f(x)\),其次幂为 \(m\),你需要计算:
答案对 \(998244353\) 取模。
\(1\le n\le 10^9,1\le m\le 2\cdot 10^4,0\le a_i,x<998244353\)
\(\rm Sol:\)
将次幂拆开,转为求:
将通常幂转为下降幂通过斯特林数实现:
那么我们直接优雅的插值,优雅的递推斯特林数,然后优雅的求和即可。
另一种处理方法是考虑为啥给了点值。
我们考虑多项式 \(f(k)\) 的牛顿级数。
形如:
我们现在已知点值序列,所以所求的系数序列可以被二项式反演描述:
所以所求即:
于是可以休闲 NTT/brute force 把 \(f_i\) 求出来,然后直接优雅的计算答案即可。
emmm 2e4 为啥 \(m^2\) 不能过啊...为啥不开 \(1e5\),这样我就死心了 TAT
如何优雅的二项式反演:
【清华集训2016】组合数问题 [* hard]
- Lucas 定理,数位 dp
多组询问,每次给定 \(n,m,k\),保证 \(k\) 为质数
求有多少对 \((i,j)\) 满足:
\(\rm Sol:\)
注意到 \(k\) 非常小,由 \(\rm Lucas\) 定理,我们知道其等价于:
如此往复下去,我们发现一对 \(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\) 对于答案的影响为:
当然如果 \(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\) 变成使得平均边权最小。
然后两类讨论,然后莽点分治,写一个 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\),然后定义卷积:
其中 \(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
考虑三进制不退位减法:
我们发现结果为 \(1\) 等价于 win,结果为 \(2\) 等价于 lose
设 \(bit_k(x)\) 表示 \(x\) 中的 \(k\) 的数量。
那么我们有转移形如:
不难发现贡献实际上只和 \(x\oplus y\) 相关。
设 \(\odot\) 表示三进制不进位加法,那么不难发现:
于是相当于计算 3 进制下异或卷积的 \(k\) 次幂。
我们搞出 FWT 的点值即可处理了。
注意到 \(k\) 进制 FWT 相当于在做循环卷积,这样我们只需要将给 \(k\) 进制单位根代入进去即可。
具体式子:
这样递归即可,由于只需要乘以单项式,所以复杂度是 \(\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 的时候取模,所以可以最后取模。