清华集训2016做题记录
清华集训2016做题记录
已完成
- 【清华集训2016】Alice和Bob又在玩游戏
- 【清华集训2016】魔法小程序
- 【清华集训2016】如何优雅的求和
- 【清华集训2016】石家庄的工人阶级队伍比较坚强
- 【清华集训2016】你的生命已如风中残烛
- 【清华集训2016】温暖会指引我们前行
- 【清华集训2016】组合数问题
- 【清华集训2016】汽水
未完成
我好菜啊,每道题都要贺来贺去,剩下的题咕了,几何写不动,数据结构太胖,题答题会玩。
【清华集训2016】Alice和Bob又在玩游戏
这显然是一个平等博弈,考虑用 \(\text{SG}\) 定理解决,即 \(SG(u)\) 为以 \(u\) 为根的子树做为一个游戏的 \(SG\) 函数值,那么我们要求的就是 \(u\) 的后继集合的 \(\text{mex}\) 。
对于选 \(u\) 子树内点 \(v\) 的决策,该后继的集合的 \(SG\) 值为删去 \(u\rightarrow v\) 这条链后每个子树根的 \(SG\) 值异或起来,对于子树内每个点 \(v\),当前根的游戏里选 \(v\) 得到的 \(SG\) 值,那么每次加入一个祖先相当于给这个值异或上某个值。
问题等价于支持一个集合异或上一个值,合并两个集合,查询一个集合第一个没有出现的元素,那么用线段树合并即可,区间异或相当于打一个翻转标记。
【清华集训2016】魔法小程序
这个程序在做的事情是, 令 \(d_{i,j}=\lfloor \frac{b_i}{\prod_{k=1}^{j-1}a_k}\rfloor\bmod 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(x\ominus y)][cnt2(x\ominus y)]\) ,记这个值为 \(b_{x\ominus y},f_x\) 为上一轮结束时 \(x\) 的得分 \(F_x\) 为这一轮结束时 \(x\) 的得分那么有
我们要求的是 \(F\times b^T\) 。
本质也就是一个三进制不进位加法的卷积,高维FWT即可。
考虑傅里叶变换的时候是做这样一件事情记 \(B_i\) 为点值 ,\(A_i\) 为系数,
上面那个式子本质上是一个向量乘范特蒙德矩阵
逆矩阵是
(感谢愤怒的种狗教我这个题并给我这两个矩阵)
那么这个题就是 \(k=3\) 的情况,枚举每一维做直接套上面那个线性变换就好了。
比较恶心的一点是直接用单位根会爆精,要考虑模意义下的单位根,但单位根解出来是 \(\omega = \frac{-1 + \sqrt 3 i}{2}\),所以还要扩域在 \(ar+b\sqrt{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_i\choose 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_1\geq 0\) 且 \(W_2 \geq 0\) ,点分后扫描线加two-pointer即可。