Live2D

Solution Set -「LOCAL」冲刺省选 Round XXVII

\(\mathscr{Summary}\)

  还行,B 题挺不错,C 题就省选来说有点水(?

\(\mathscr{Solution}\)

\(\mathscr{A-}\) 分裂

  初始时,你有一个 \(1\) 级球,每次可以把一个 \(k\) 级球变成 \(k+1\)\(k+1\) 级球,请构造恰好得到 \(n\) 个球的方案,仅需输出最终球的等级和对应数量。

  多测,\(T\le10^4\)\(n\le10^{18}\),你需要保证所有方案中球的等级种类之和不超过 \(10^7\)


  一开始去优化“球的数量之和”,大大地伪了一发。

  注意部分分有个 \(n\) 是阶乘,而阶乘的时候等级种类自然是最少的,所以我们先找到最大的 \(x!\le n\),先把 \(1\) 级球不停操作得到 \(x!\)\(x\) 级球,此时再取一定数量的 \(x\) 级球操作到 \(x+1\) 级球,设 \(n'\) 为还需要的球的数量,那么 \(n'\le x\)。通过升级一个 \(k\) 级球,还原 \(k\)\(k\) 级球,可以使 \(n'\) 减少 \(1\),模拟几次就行。

  阶乘的是指数级,那么复杂度为 \(\mathcal O(T\log n)\),每次使用不超过 \(4\) 种等级。

\(\mathscr{B}-\) 未来

  给定长度为 \(n\),字符集为 \(\{\text r,\text g,\text b\}\) 的字符串 \(S\),对其进行 \(m\) 次变换,每次变换使 \(S\) 变为 \(S'\),若 \(S_i=S_{(i+1)\bmod n}\)\(S'_i=S_i\),否则 \(S'_i=\{\text r,\text g,\text b\}\setminus\{S_i,S_{(i+1)\bmod n}\}\)。求变换后的最终序列。

  \(n\le5\times10^5\)


  套路性地去想一个具有交换律、结合律的整数运算来等价表示两个字符的运算结果。进而,令三种字符为 \(0,1,2\),可以构造出这样的运算:\(a\oplus b=(-(a+b))\bmod 3\),并且这个负号仅由 \(m\) 决定,问题被转化成:给定序列 \(\{a_n\}\),每次操作令 \(a'_i=a_i+a_{(i+1)\bmod n}\),求 \(m\) 次操作后每个 \(a_i\bmod 3\)

  若 \(a_i\) 的值在下标移动 \(d\) 次后更新到了 \(a_j\),那么贡献系数显然是 \(\binom{m}d\),注意仅对 \(3\) 取模,所以对它 Lucas 一发,设 \(m=\sum 3^{m_k}\)\(m\) 的三进制分解(如果某个幂次数是 \(2\),加两次),就组合意义上,我们可以依次对 \(\{a_n\}\) 施加 \(3^{m_1}\) 次操作,再施加 \(3^{m_2}\) 次操作,……最后总共施加 \(m\) 次操作。每次操作中,贡献系数都是 \(\binom{3^{m_i}}{d}\),因而 \(d=0\)\(d=3^{m_i}\) 时,才能使系数非 \(0\),这个可以 \(\mathcal O(n)\) 模拟一遍算出来,所以总复杂度 \(\mathcal O(n\log m)\)

\(\mathscr{C}-\) 回忆

  给定一个 \(n\times m\) 的网格,\((i,j)\)\(a_{i,j}\) 的概率可用,求可用单元格构成的四联通块中,最大块大小的期望。

  \(nm\le40\)


  你能想到最暴力的插头 DP:按列转移,状态数组直接 map<pair<vector<int>, vector<int> >, int>,过了。打了下表,有效状态数不超过 \(10^5\)

posted @ 2022-03-07 15:46  Rainybunny  阅读(126)  评论(0编辑  收藏  举报