「归档」AT 板刷

我不好说。晚起的星星或许也是星星,哪怕它是被别人拿鞭子抽升起的。

因为很菜,所以可能也会记录很多 naive 的题目。

人海里相依?


「ARC104C」

想歪了,构造方案非常繁琐。考虑到题目只要求是否可行,所以思考可达性 dp。如果给 \(-1\) 的空位填数就回到了构造方案的思路上,不妨转而考虑每个楼层的上下情况。

\(f_i\) 表示前 \(i\) 层是否有合法方案,转移有

\[f_i = \vee \{ f_{j - 1} \wedge \mathrm {check}(j, i) \}, 1 \leq j \leq i - 1, 2 | i - j + 1 \]

那么对于区间 \([j, i]\),如果有 \(j\) 以下楼层到达该区间的,或者从该区间出发到 \(i\) 以上的,则该区间不合法。以此去重。

为保证区间内的长度全相同,考虑模拟合法状态的阶梯型,则合法的区间需满足在前半段都是上电梯,后半段都是下电梯。最后特判一下已有的是否符合即可。


「ARC104E」

读错题了,英语非母语劣势区间。似乎读对题了也不是很难顶。

观察值域 \([1, n] \to [1, x - 1] \vee \{x\} \vee [x + 1, n]\)\(x\) 可以随便取,这里有 \(k + 1\) 种方案。

剩下的就是在 \([1, x - 1] \vee [x + 1, n]\) 里选出合法的可重集使得和为 \(0\)。不妨考虑把值域减掉 \(x\),则有 \([1 - x, -1] \vee [1, n - x]\)。记 \(f_{i, j}\) 表示选择 \([1, i]\) 里的合法可重集和为 \(j\) 的方案数,则答案为

\[(k + 1) \times \sum \limits _{i = 0} ^{\frac {n (n + 1) k} {2}} f_{n - x, i} f_{x - 1, i} - 1 \]

多重背包即可,顺便学习前缀和优化多重背包。


「ARC104F」

因为 \(n\) 非常小,考虑直接 \(O(n^n)\) 枚举全排列,固定随机序列的相对大小。计算长度和其概率相乘就是期望。可以直接套用 CF1295F 的做法,但之前并没有弄懂,重新来过。

该题大意:一个长度为 \(n\) 的序列 \(A\),满足 \(a_i\)\([l_i, r_i]\) 等概率随机,求序列 \(A\) 不增的概率。

考虑比较 Orin 的 dp,诶不是这场怎么全是 dp 啊。若记 \(f_{i, j}\) 表示 \(a_i = j\) 时,合法的 \(a_{[1 \dots i]}\) 的方案数。转移是 \(O(na^2)\) 的通天复杂度。

如果把上下界放一起看,其实将值域切割成了很多区间,一个区间可以统一算。考虑离散化。在原基础上修改 dp 状态,\(f_{i, l} \to f_{j, k}\) 表示的是 \(\forall a_{[i + 1 \dots j]}\) 都在第 \(k\) 个区间。那么设第 \(k\) 个区间的实际大小为 \(L\),那就是 \(j - i\) 个相同的球放进 \(L\) 个盒子里,盒子允许为空。经典的插板,最终系数是 \(\binom {L + j - i - 1} {L - 1}\)。因为 \(j - i + 1\) 只有 \(O(n)\) 级别,可以暴力算。

放一个套回到这道题的转移:

\[f_{i, j} = \sum \limits _{k = 1} ^{i - 1} \sum \limits _{l = 1} ^{j - 1} \binom {L} {i - k + 1} f_{k - 1, l} \]

实现细节很烦人。哦莫,因为大小顺序想成全部是严格大于调了 40min 望周知。


「ARC105C」

\(n\) 非常小,大胆全排列枚举骆驼顺序,那么题目转化为确定骆驼间的距离。我不做 dp 呜呜呜,记 \(f_i\) 表示骆驼 \(1\) 到骆驼 \(i\) 的距离,则有转移:

\[f_i = \max \{f_j + \mathrm{len} (j, i) \}, 1 \leq j < i \]

集中在如何求 \(\mathrm{len} (j, i)\),易知 \(\mathrm{len} (j, i) = \max \{l_k\}, 1 \leq k \leq m, v_k \leq S = \sum a_{[j \dots i]}\)。考虑将道路按 \(v_k\) 排序,预处理出前缀最大值。对于每一个骆驼顺序预处理前缀和,然后查询的时候二分即可。

很简单的题,但是在 \(\mathrm{len} (i, j)\) 求法正确性上卡了很久。\(\mathrm{len} (i, j)\) 的决策其实是基于 \(i, j\) 的距离,而和内部如何协调无关。外层 \(f_i\) 的转移取最大值是为了对于所有的道路取满足条件。


「ARC105E」

好思维。一开始一直往可达性 dp 上想,结果是直接研究初末状态找结论。

考察在游戏结束的时候,整个图是什么样子。不难发现其实就是分别以 \(1\)\(n\) 为中心裂成了两部分,两部分都是完全图。这样下一次再连的时候,就只能把这两部分连起来,导致不合法。

不妨假定最后有 \(x\) 个点与 \(1\) 联通,有 \(y = n - x\) 个点与 \(n\) 联通,那从初状态到达末状态需要经历的边数即是 \(\frac {n(n - 1)} {2} - m - x \times y\)。显然,输赢之和这个式子的奇偶性有关。奇数则先手赢,偶数则后手赢。而其中 \(x\) 是唯一的变量,试想 \(x\) 奇偶性的变化会对原式产生什么影响。

注意到,如果 \(n\) 为奇数,\(x\) 不能影响原式的奇偶性,故只考虑 \(n\) 为偶数的情况。先手的优势在于可以通过连边主导 \(x\) 的奇偶性变化。思考这个过程,若一开始有 \(x'\) 个点和 \(1\) 连通,\(y'\)\(n\) 连通。

  • \(x'\) 是我们想要的目标奇偶,那么我们需要在之后的过程中保证与 \(x'\) 连接的奇数大小的连通块个数为偶数,又因为 \(n\) 为偶数,故当且仅当 \(x'\)\(y'\) 奇偶相同时满足。在此情况下,如果 \(x'\) 不是我们想要的目标奇偶,也无法通过先手优势去改变 \(x'\) 的奇偶。故而,当 \(x'\)\(y'\) 奇偶相同时,最终的奇偶性只又最初的奇偶性决定。
  • 自然讨论当 \(x'\)\(y'\) 奇偶不同时。同样的思路,利用先手优势改变 \(x'\) 的奇偶,不难发现所有对手做出的逆向改变,你都恰有更多的符合需要的连通块来抵消这样的改变。即此时先手必胜。

「ARC106F」

\(\sum d_i < 2 \times (n - 1)\) 时,因为一个孔只能被连接一次,故一定无解。否则考虑通过在每个连通块内选定特殊的孔为基准来做到不重不漏,本质上是提前定好了连接到某一个连通块时使用孔的顺序。

对于每个连通块随机选择一个特殊的孔,然后重复以下操作:

  • 若连通块个数大于 \(2\),选择一个特殊的孔 \(a\),再选择一个与 \(a\) 不在同一连通块的非特殊的孔 \(b\),连接 \(a, b\)。新的连通块的特殊的孔可以是任意一个编号离 \(a\)\(b\) 最近的未被使用的孔。

  • 若连通块个数等于 \(2\),连接两个连通块的特殊孔。

统计方案。对于初始特殊孔的选择有 \(\prod \limits _{i = 1} ^{n} d_i\);第 \(i\) 次选择时可以使用的非特殊孔还有 \(\sum \limits _{i = 1} ^{n}d_i - (i - 1) - n\),即总数减特殊孔再减去已经使用过的;考虑到同一棵树会因为不同的加边顺序重复统计 \((n - 1)!\)

\(S = \sum \limits _{i = 1} ^{n} d_i\),故简单化简可得答案为:

\[\prod \limits _{i = 1} ^{n} d_i \times \prod \limits _{i = 0} ^ {n - 3} (S - n - i) \]


「ARC106E」

难点在于忘记了 \(\mathrm{Hall}\) 定理。

考虑到对于 \(i\) 这个人来说,如果 \(a_i \geq k\),那么最多需要 \(k\) 天就可以颁完奖;如果 \(a_i \leq k\),那么最多需要 \(k + a_i < 2k\) 就可以颁完奖。故 \(n\) 个人全部颁完奖所需天数 \(2nk\) 不会特别大。

二分这个天数,再将每个人拆成 \(k\) 个点,模拟向每一天连边,把没有连边的天去掉,只要存在完美匹配即合法。就是一个 \(\mathrm{Hall}\) 定理的运用。

预处理出每一天是哪些人会来你家,对于每一天来的人的集合 \(S\),找到所有对应集合和 \(S\) 有交的天数,判断天数是否能满足 \(S\) 里的所有人即可。简单容斥转化为子集统计,然后高维前缀和。


「ARC108D」

智能分讨题!

初始状态 \(\mathrm{AB}\) 是确定的,那么第一次操作一定是操作类型 \(\mathrm{AB}\)。考虑到在一开始无限使用 \(\mathrm{AB}\),只会让序列变为 \(\mathrm{AA \dots AB}\) 或者 \(\mathrm{AB \dots BB}\)。似乎是等价关系,可以钦定。

优先钦定操作 \(\mathrm{AB}\)\(\mathrm{A}\),那么考虑剩下几个操作,目前只能进行\(\mathrm{AA}\)\(\mathrm{AB}\) 两种操作。\(\mathrm{AA}\) 明显简单一些,能多处理一点操作是一点。

  • \(\mathrm{AA}\)\(\mathrm{A}\),那么末状态只可能是 \(\mathrm{AA \dots AB}\),答案为 \(1\)
  • \(\mathrm{AA}\)\(\mathrm{B}\),那么可能在前面的相邻的 \(\mathrm{A}\) 中插入 \(\mathrm{B}\),暂时没出现相邻的 \(\mathrm{B}\),故仅存的操作 \(\mathrm{BA}\) 会影响到操作 \(\mathrm{BB}\) 的使用。
    • 若操作 \(\mathrm{BA}\)\(\mathrm{B}\),直观地说明 \(\mathrm{B}\) 在前面部分可以相邻。那么末状态形如 \(\mathrm{ASAB}\)\(\mathrm{S}\) 不存在限制,答案即为 \(2 ^ {n - 3}\)
    • 若操作 \(\mathrm{BA}\)\(\mathrm{A}\),则末状态仍形如 \(\mathrm{ASAB}\)\(\mathrm{S}\)\(\mathrm{B}\) 不能连续,答案即为 \(\mathrm{Fib}_{n - 2}\)。规定斐波那契数列 \(\mathrm{Fib}_0 = 1, \mathrm{Fib}_1 = 1\)

然后是 if 时间。


「ARC110D」

简单题,当然可以直接变上项公式暴力解决。后面看题解发现有很舒服的组合意义做法,记在这里。

考虑将 \(\binom {b_i} {a_i}\) 写作 \(\binom {a_i + d_i} {a_i}\),即是向原本 \(a_i\) 个黑球中再插入 \(d_i\) 个白球的方案数。那么将原来的 \(a\) 序列对应的黑球排成一列,向里面插入 \(m - \sum a_i\) 个白球,即是最终答案的等价。正确性可以会看 \(b\) 序列的意义,将每个 \(a_i\) 在原黑球序列里划开,第 \(i\) 个小块内的白球和黑球的总数就是 \(b_i\) 的含义。

然后就暴力求 \(\binom {m + n} {\sum a + n}\) 即可。


「ARC112D」

容易发现,无论起点是哪个格子,最后都能到达地图的左上角,因此只需统计从 \((1, 1)\) 出发情况下的答案即可。

在这种情况下,最优的行进方案一定是从按行覆盖或按列覆盖二者之一,于是考虑如何统计一行(列)已经被覆盖。

由于边界的存在,边界的两个行(列)都是可以覆盖的。而对于地面格,由于在该格需要停下,该格所在行的覆盖情况和所在列的覆盖情况等价。

考虑建立图论模型:如果 \((r, c)\) 为地面格,则从第 \(r\) 行向第 \(c\) 列连边,表示二者被覆盖的情况一致。如果两行(列)位于同一连通分量内,则只要其中一行(列)被覆盖,另外一行(列)即可同样被覆盖。

到这里,所求就等价于,求最少添加多少条边,使得所有行(列)处在同一个连通分量中。并查集维护即可。

posted @ 2023-09-27 17:32  STrAduts  阅读(42)  评论(0编辑  收藏  举报