Live2D

Solution Set -「NOIP Simu.」20221014

\(\mathscr{A}\sim\)「Unknown」tothecrazyones

  有 \(n\) 堆石子, 第 \(i\) 堆有 \(a_i\) 个. Alice 和 Bob 轮流抓取, Alice 每次从至少一堆石子中每堆拿走恰好 \(x\) 个, Bob 每次从至少一堆石子中每堆拿走恰好 \(y\) 个, 不能操作者负. 求胜者.

  多测, \(\sum n\le5\times10^5\), \(x,y,a_i\le10^9\).


  Tag:「水题无 tag」

  经验使然, 先 \(a_i\gets a_i\bmod (x+y)\), 后面的结论好说, 只要 \(\sum[a_i\ge x]>0\)\(\sum[a_i\ge x]\ge\sum [a_i\ge y]\) 就 Alice 必胜, 否则 Bob 必胜. 大样例测过就交了, 所以签到比较迅速. 证明的 \(\bmod (x+y)\) 的正确性并不复杂, 这里就咕啦.

\(\mathscr{B}\sim\)「Unknown」vmefifty

  给定 \(\{a_n\}\), 每次可以删除相邻且值不同的一对 \(a_i\)\(a_{i+1}\), 求至少删多少次让 \(\{a_{n'}\}\) 全部相同.

  多测, \(T\le5\), \(n\le2\times10^3\).


  Tags:「A.DP-杂项」「C.性质/结论」

  如何判断 \(a[\ell:r]\) 能否被删空? 显然, 充要条件是 \(2\mid(r-l+1)\)\(a[\ell:r]\) 中不存在严格众数.

  那么这里就有一个暴力 \(\mathcal O(n^3)\) DP, 令 \(f(i,j)\) 表示将 \(a[1:i]\) 处理直至所有值为 \(j\), 最多保留多少个值. 转移时枚举最近一段删除区间.

  优化? 注意到 \([x,y]\) 可删且 \([y+1,z]\) 可删 \(\Rightarrow [x,z]\) 可删, 而转移 \(f\) 时我们只关心是否有 \(a_i=j\). 也就是说, 只要一段区间里没有 \(j\), 我们没必要去考虑怎么一点一点把区间删掉, 而只是在意这段东西被删完后, 我下一个能去到的 \(a_i=j\) 在哪里. 因此我们只需要对 \(a_i=j\) 的位置做 \(f(i,j)\) 的转移. 这样复杂度就是 \(\mathcal O(Tn^2)\) 了.

\(\mathscr{C}\sim\)「CF 662C」Binary Table

  Link & Solution.

\(\mathscr{D}\sim\)「CF 1034C」Region Separation

  Link.


  Tag:「水题无 tag」

  检查一下 \(1\sim n\)\(\sum a\) 的因子是否合法, 在固定每个连通块点权后, 划分方案若存在则唯一. 之后 \(\mathcal O(n\log n)\) DP 一下切分方案数即可.

posted @ 2022-10-14 18:52  Rainybunny  阅读(68)  评论(0编辑  收藏  举报