\(\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
\(\mathscr{D}\sim\)「CF 1034C」Region Separation
Link.
Tag:「水题无 tag」
检查一下 \(1\sim n\) 里 \(\sum a\) 的因子是否合法, 在固定每个连通块点权后, 划分方案若存在则唯一. 之后 \(\mathcal O(n\log n)\) DP 一下切分方案数即可.