清华集训2016做题记录
已完成
- 【清华集训2016】Alice和Bob又在玩游戏
- 【清华集训2016】魔法小程序
- 【清华集训2016】如何优雅的求和
- 【清华集训2016】石家庄的工人阶级队伍比较坚强
- 【清华集训2016】你的生命已如风中残烛
- 【清华集训2016】温暖会指引我们前行
- 【清华集训2016】组合数问题
- 【清华集训2016】汽水
未完成
我好菜啊,每道题都要贺来贺去,剩下的题咕了,几何写不动,数据结构太胖,题答题会玩。
【清华集训2016】Alice和Bob又在玩游戏
这显然是一个平等博弈,考虑用 ( ext{SG}) 定理解决,即 (SG(u)) 为以 (u) 为根的子树做为一个游戏的 (SG) 函数值,那么我们要求的就是 (u) 的后继集合的 ( ext{mex}) 。
对于选 (u) 子树内点 (v) 的决策,该后继的集合的 (SG) 值为删去 (u ightarrow v) 这条链后每个子树根的 (SG) 值异或起来,对于子树内每个点 (v),当前根的游戏里选 (v) 得到的 (SG) 值,那么每次加入一个祖先相当于给这个值异或上某个值。
问题等价于支持一个集合异或上一个值,合并两个集合,查询一个集合第一个没有出现的元素,那么用线段树合并即可,区间异或相当于打一个翻转标记。
【清华集训2016】魔法小程序
这个程序在做的事情是, 令 (d_{i,j}=lfloor frac{b_i}{prod_{k=1}^{j-1}a_k} floormod a_j),对于每一个 (d_i) 求一个高维前缀和。
那么我们要做的事情就是还原这个高维前缀和,枚举每一维减一下就好了,卡空间差评。
【清华集训2016】如何优雅的求和
考虑用下降幂多项式 (f(x)= sum_{i=0}^n a_i x^{underline{i}}),那么有:
我们要将一个点值转成一个下降幂多项式
记 (A(x)=sum_{i=0}^m a_ix^i) ,(B(x)=sum_{i=0}^m frac{b_i}{i!} x^i) ,那么就有 (A(x)=frac{B(x)}{e^x}) 。
其实插值就过了,然而贺之前并没有想到这是一个 (m+1) 次多项式。
【清华集训2016】石家庄的工人阶级队伍比较坚强
设剪刀为 (0) ,石头为 (1),布为 (2) ,这个胜负关系就是三进制不退位减法,那么 (x) 和 (y) 玩一轮比赛的贡献就是 (B[cnt1(xominus y)][cnt2(xominus y)]) ,记这个值为 (b_{xominus y},f_x) 为上一轮结束时 (x) 的得分 (F_x) 为这一轮结束时 (x) 的得分那么有
我们要求的是 (F imes b^T) 。
本质也就是一个三进制不进位加法的卷积,高维FWT即可。
考虑傅里叶变换的时候是做这样一件事情记 (B_i) 为点值 ,(A_i) 为系数,
上面那个式子本质上是一个向量乘范特蒙德矩阵
逆矩阵是
(感谢愤怒的种狗教我这个题并给我这两个矩阵)
那么这个题就是 (k=3) 的情况,枚举每一维做直接套上面那个线性变换就好了。
比较恶心的一点是直接用单位根会爆精,要考虑模意义下的单位根,但单位根解出来是 (omega = frac{-1 + sqrt 3 i}{2}),所以还要扩域在 (ar+bsqrt{3}i) 域上做。
【清华集训2016】你的生命已如风中残烛
根据 Raney 引理可以得到一个结论,对于所有和为 (1) 的整数序列,其所有圆排列中有且仅有一个满足所有的前缀和都大于 (0) 。
先证明至多存在一个,考虑反证,假设存在两个位置 (x, y) ,满足以 (x,y) 为第一个元素的排列部分和均为大于 (0) ,那么 (x) 到 (y) 的两条路径和均 (>0) ,也就是说整个序列的和 (>1) ,与整个序列和为 (1) 矛盾。
考虑证明至少一个,构造一下,随便钦定一个第一个元素,找到第一个前缀和 (leq 0) 的位置 (x) ,如果不存在这样一个位置就已经构造出来了。那么此时钦定 (x+1) 为第一个元素,可以得知 (x+1) 到原先结尾的所有前缀和都是大于 (0) 的,又因为原先第一个元素到 (x-1) 所有前缀和都是大于 (0) 的,这样就构造出来了。
这个时候再大力搞一搞,先把所有卡的值 (-1) ,然后再在随便加一个 (-1) 的元素,那么要求的排列满足除最后一位外任意时刻前缀和 (geq0) ,类似的证明过程会发现一个圆排列只有一个满足,且满足的圆排列最后一位一定是 (-1) ,最后去一下标号就得到了答案为 (frac{m!}{m-n+1}) 。
【清华集训2016】温暖会指引我们前行
因为要字典序最大化一个瓶颈路一样的东西,不难发现每次走的路径一定是温度的最大生成树上的路径,那么只需要用LCT维护一下这个最大生成树就好了。
【清华集训2016】组合数问题
先卢卡斯定理
考虑一直做下去会得到若干个 ({x_ichoose y_i},x_i,y_i < k) 的形式,如果当中某一步出现 (y_i > x_i) ,那么最终的结果就为 (0),否则一定不为 (0)。
这个 (x_i,y_i) 实际上就是 (i) 在 (k) 进制下的每一位,那么我们直接把 (n,m) 放到 (k) 进制下就可以直接做数位DP了。
具体来说每次就记一下大小关系已经是否已经出现了一位 (y_i >x_i) ,一开始处理的时候细节比较多。
【清华集训2016】汽水
比较明显的分数规划,二分一个答案为 (mid) ,那么利用初中不等式知识就可以转化题意了。
记 (k_1 =k-mid,k_2=k+mid,W_1=sum w_i-sizek_1,W_2=sizek_2-sum w_i)
显然 (W_1,W_2) 可以直接合并,而我们的目标是判断是否存在一条路径 (W_1geq 0) 且 (W_2 geq 0) ,点分后扫描线加two-pointer即可。