清华集训 2016 选做
【清华集训】如何优雅的求和 [* easy]
给定多项式 (f(x)),其次幂为 (m),你需要计算:
答案对 (998244353) 取模。
(1le nle 10^9,1le mle 2cdot 10^4,0le a_i,x<998244353)
( m Sol:)
将次幂拆开,转为求:
将通常幂转为下降幂通过斯特林数实现:
那么我们直接优雅的插值,优雅的递推斯特林数,然后优雅的求和即可。
另一种处理方法是考虑为啥给了点值。
我们考虑多项式 (f(k)) 的牛顿级数。
形如:
我们现在已知点值序列,所以所求的系数序列可以被二项式反演描述:
所以所求即:
于是可以休闲 NTT/brute force 把 (f_i) 求出来,然后直接优雅的计算答案即可。
emmm 2e4 为啥 (m^2) 不能过啊...为啥不开 (1e5),这样我就死心了 TAT
如何优雅的二项式反演:
【清华集训2016】组合数问题 [* hard]
- Lucas 定理,数位 dp
多组询问,每次给定 (n,m,k),保证 (k) 为质数
求有多少对 ((i,j)) 满足:
( m Sol:)
注意到 (k) 非常小,由 ( m Lucas) 定理,我们知道其等价于:
如此往复下去,我们发现一对 (i,j) 满足 (inom{j}{i}) 是 (k) 的倍数等价于 (i) 和 (j) 在 (k) 进制下存在至少一位满足 (i> j)
于是我们可以考虑设计一个 (dp) 有统计有多少对 (i,j) 满足 (ile 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 有没有必胜策略。
( m Sol:)
找一种方式来快速计算 sg 值。
考虑一棵子树,将其 sg 值统计在其最上部的节点处,设 (f_u) 表示 (u) 为根子树的 sg 值,设 (g_u) 为除去 (u) 之外的其他子树的 sg 值的异或和,那么容易得到删去节点 (x) 对于答案的影响为:
当然如果 (x) 为 root 那么其对答案的贡献则不包含 (f)
如果设 (w_x) 为 (x o root) 的路径上的 (goplus f) 的异或和,那么显然 (sg_{rt}) 为 (w_x) 中没有出现过的数。
然而单次转移的时候需要给所有子树异或上 (g_x),然后再求 ( m mex),然后再异或上 (f_x),处理起来显然非常麻烦。
不过我们实际上只需要内部是否满序这个性质,相同权值我们只需要插入一遍,这样就可以查询 ( m mex) 了,集体异或上权值直接打异或标记即可,复杂度 (mathcal O(nlog n)),当然要写一个 01trie 合并。
【清华集训2016】温暖会指引我们前行 [* easy]
给定一张图,每条边有两个属性,温度 ((f)) 与代价 ((w)),定义 (u o v) 的最温暖的路径为一条路径经过若干条边,且其中温度最低的边的温度尽可能大,次低的尽可能大,依次类推(可以认为是字典序比较,但是认为空串的字典序最大)
支持以下三种操作:
- 加入一条边
- 修改一条边的代价 (w) 为 (w')
- 查询 (u o v) 的最温暖的路径的代价权值和。
不允许经过重复路径,对于每组查询输出答案。
( m Sol:)
保证了温度不同,保证了字典序比较,那么我们就只需要维护最大生成树吧。
然后拆边为点,是不是很 easy 呢?
【清华集训2016】汽水
给定一棵大小为 (n) 的树,常数 (k),边有边权,找一条路径,使得这条路径的平均边权尽可能接近 (k),输出差值的绝对值向下取整的结果
(nle 5cdot 10^4,w_i,kle 10^{13})
( m Sol:)
先把边权都减去 (k) 变成使得平均边权最小。
然后两类讨论,然后莽点分治,写一个 two-point。复杂度为 (mathcal O(nlog^2 nlog w)),然后常数看着不是很大(存疑)?
[清华集训2016]你的生命已如风中残烛 [* hard]
有 (n) 个特殊牌和 (m-n) 张普通牌,有一个长度为 (m+1) 的序列,最后一个元素固定为 (0),其他元素编号为 (1sim m),每张特殊牌有一个特殊的权值 (w_i) 表示获得了其之后可以摸 (w_i) 张牌,保证 (sum w=m),初始您获得第 (1) 张牌,求所有 (m!) 种方案中使得您摸完牌的方案数。
(m-nge 4,nle 40,w_ile 10^5)
Solution
设初始值为 (1),那么问题等价于对于任意一个位置有前面的数的前缀和 (ge) 其。(所有数均有标号)
即设 (pre_i=sum w_j[jle i]),那么有 (pre_{i-1}ge i)
然后将所有数的 (w) 减去 (1),等价于 (pre_{i-1}ge 1)
我们认为初始值为 (0),问题等价于 (forall i,pre_ige 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})
(mle 12,tle 10^9,ple 10^9)
Solution
考虑三进制不退位减法:
我们发现结果为 (1) 等价于 win,结果为 (2) 等价于 lose
设 (bit_k(x)) 表示 (x) 中的 (k) 的数量。
那么我们有转移形如:
不难发现贡献实际上只和 (xoplus 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 的时候取模,所以可以最后取模。