清华集训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}}\),那么有:

\[\begin{align} Q(f,n,x) &= \sum_{k = 0}^{n}f(k){n\choose k}x^k(1 - x) ^{n - k} \\ &=\sum_{i=0}^n\sum_{j=0}^ma_ji^{\underline{j}}{n\choose i}x^i(1 - x) ^{n - i} \\ &=\sum_{i=0}^ma_i\sum_{j=0}^n\frac{j!}{(j-i)!}\frac{n!}{(n-j)!j!}x^j(1-x)^{n-j} \\ &=\sum_{i=0}^ma_i\sum_{j=0}^n\frac{n!}{(n-j)!(j-i)!}x^j(1-x)^{n-j}\\ &=\sum_{i=0}^ma_in!\sum_{j=0}^n\frac{x^j}{(j-i)!}\frac{(1-x)^{n-j}}{(n-j)!} \\ &=\sum_{i=0}^ma_ix^in!\sum_{j=0}^n\frac{x^{j-i}}{(j-i)!}\frac{(1-x)^{n-j}}{(n-j)!}\\ &=\sum_{i=0}^ma_ix^in![x^{n-i}](e^xe^{1-x})\\ &=\sum_{i=0}^ma_ix^i\frac{n!}{(n-i)!} \end{align} \]

我们要将一个点值转成一个下降幂多项式

\[b_i=\sum_{j=0}^ma_j\frac{i!}{(i-j)!}\\ \frac{b_i}{i!}=\sum_{j=0}^m\frac{a_j}{(i-j)!} \\ \]

\(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_x=\sum_{y}f_yb_{x\ominus y} \\ F_k=\sum_{x\oplus y=k}f_xb_y \]

我们要求的是 \(F\times b^T\)

本质也就是一个三进制不进位加法的卷积,高维FWT即可。

考虑傅里叶变换的时候是做这样一件事情记 \(B_i\) 为点值 ,\(A_i\) 为系数,

\[B_i=\sum_{j=0}^n\omega_{k}^{ij}A_j \]

上面那个式子本质上是一个向量乘范特蒙德矩阵

\[T_n = \begin{bmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \omega_n ^ 1 & \omega_n ^ 2 & \ldots & \omega_n ^ {n - 1} \\ 1 & \omega_n ^ 2 & \omega_n ^ 4 & \ldots & \omega_n ^ {2(n - 1)} \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 1 & \omega_n ^ {n - 1} & \omega_n ^ {2(n - 1)} & \ldots & \omega_n ^ {(n - 1)(n - 1)} \\ \end{bmatrix} \]

逆矩阵是

\[T_n ^ {-1} = \frac{1}{n} \begin{bmatrix} 1 & 1 & 1 & \ldots & 1 \\ 1 & \omega_n ^ {-1} & \omega_n ^ {-2} & \ldots & \omega_n ^ {-(n - 1)} \\ 1 & \omega_n ^ {-2} & \omega_n ^ {-4} & \ldots & \omega_n ^ {-2(n - 1)} \\ \ldots & \ldots & \ldots & \ddots & \ldots \\ 1 & \omega_n ^ {-(n - 1)} & \omega_n ^ {-2(n - 1)} & \ldots & \omega_n ^ {-(n - 1)(n - 1)} \\ \end{bmatrix} \]

(感谢愤怒的种狗教我这个题并给我这两个矩阵)

那么这个题就是 \(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】组合数问题

先卢卡斯定理

\[\sum_{i=0}^n\sum_{j=0}^n [{i\choose j}\equiv0(\bmod k)]=\sum_{i=0}^n\sum_{j=0}^n [{\lfloor\frac{i}{k}\rfloor\choose \lfloor\frac{j}{k}\rfloor}{i \bmod k \choose j \bmod k}] \]

考虑一直做下去会得到若干个 \({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\) ,那么利用初中不等式知识就可以转化题意了。

\[|\frac{\sum w_i}{size}-k|\leq mid \\ (k-mid)size\leq \sum w_i\leq(k+mid)size \\ \]

\(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即可。

posted @ 2019-11-03 15:06  Joyemang33  阅读(522)  评论(0编辑  收藏  举报