2021.12.30 模拟赛

才想起来去年有一场模拟赛没补。

「LibreOJ NOI Round #2」单枪匹马

过程中是不需要约分的:已经得到最简分数 \(\frac{x}{y}\),那么 \(a_i+\frac{y}{x}=\frac{a_ix+y}{x}\) 分子分母的 \(\gcd\) 依然为 \(1\)

运算过程可以写成矩阵转移,线段树维护,或者直接维护矩阵 \(A\)\(A^{-1}\) 前缀积(注意顺序)。

「ZJOI2020」传统艺能

考虑每个节点的贡献。

标记的下传过程是线段树以根为起点的一条路径,也就是只需要考虑每个节点的所有祖先是否有标记。

可以 DP \(f_u(i,0/1,0/1)\) 表示 \(u\) 节点在第 \(i\) 次操作后 \(u\) 祖先是否有标记、\(u\) 是否有标记,的方案数。转移就是大量分类讨论,具体见代码。然后写成矩阵转移,快速幂即可。

根需要特殊考虑。

「LibreOJ NOI Round #1」北校门外的回忆

规律:

  • 如果 \(K\) 是奇数,每个数 \(x\)\(x+\mathrm{lowbit}(x)\) 连边,会形成若干条链;如果 \(K\) 是偶数,\(+\mathrm{lowbit}\) 的过程可能会变成 \(0\),链的底部会分叉。
  • \(+\mathrm{lowbit}\) 其实就是最低的非零位 \(\bmod K\) 意义下乘 \(2\)

\(r\)\(x\) 的最低非 \(0\) 位,\(r=2^{l_r}c_r,K=2^{l_K}c_K\)

\(l_r< l_K\) 时,\(r\to 2r\bmod K\) 的路径是 \(\rho\) 形环,\(x\to x+\mathrm{lowbit(x)}\) 的路径是一颗树;

\(l_r\ge l_K\) 时,\(r\to 2r\bmod K\) 的路径是环,\(x\to x+\mathrm{lowbit(x)}\) 的路径是一条链。

\(l_r< l_K\) 考虑暴力跳,不超过 \(\log K\)\(x\) 就能跳到链上。每条链用数据结构维护修改查询。

如何找到所在链?链的最小数可以唯一地表示这条链,这样的数 \(s\) 满足 \(l_{r_s}\ge l_K\) 并且 \(s\) 除了最低非 \(0\) 位以外是极小的。

一种方法是倍增去找,但是这里我们不倍增,学习了一下 EI 在 loj 上的最优解代码,利用 \(r\) 有循环节的特点。

\(r\) 所在环为 \(C\)\(C\) 一圈产生的进位为 \(\mathrm{period}_C\)。我们先跳到环的起点(最小数),然后每次跳一整个环,也就是 \(\bmod \mathrm{period}_C\)。剩余的部分已经可以唯一确定链的开头了,不必具体确定是哪一个数。

复杂度 \(\mathcal O(Q(\log_2K\log_Kn+\log Q))\)

posted @ 2022-01-06 08:21  RenaMoe  阅读(59)  评论(0编辑  收藏  举报