ARC-122

A

简单 \(DP\),令 \(f_{i, 0 / 1}\) 表示当前考虑完前 \(i\) 个数,当前位置是否填了 \(-\) 的贡献之和。

考虑维护一个 \(g_{i, 0 / 1}\) 状态与 \(f\) 一致,存储方案数,这样就可以 \(\mathcal{O}(1)\) 转移了。

复杂度 \(\mathcal{O}(n)\)

B

显然答案可以使用 \(x\) 表示出来,分析单调性可知只有可能在给出的点上取到。

然后随便怎么算都可以。

C

写了个乱搞,不太会证次数正确。

考虑假设最终状态为 \((n, x)\),考虑使用辗转相除的方法构造,使用次数可以 \(\mathcal{O}(\log n)\) 计算。

注意到构造形式与斐波那契数列非常像,于是我们取 \(x = \dfrac{n}{\frac{\sqrt{5} + 1}{2}}\) 左右的数拿进去计算次数,取最小的出来即可。

大概可以跑 \(T = 10 ^ 6\) 组数据,可以通过。

(其实我交的不是这个,但本质上与这个相同且这个更为简便)。

正解应该是 齐肯多夫表示法

D

首先博弈是假的,因为 \(Bob\) 可以预先想好对自己最优的分组方式,然后依据 \(Alice\) 的选择总是可以对应着选。

于是问题就转化为:

  • 给定 \(2n\) 个元素,需要将其分为 \(n\) 组,每组 \(2\) 个元素。使得任意一组异或和的最大值最小。

考虑按位贪心,统计当前位 \(1\) 的个数 \(cnt\)

  • \(cnt\) 为奇数,那么意味着这一位必定会产生贡献。

同时我们可以只让一个组在这一位产生贡献且这样显然最优,那么就只要管这个组的贡献了。

直接暴力将这些数暴力插入 \(\tt trie\),然后暴力查询最小值即可。

接下来这些数都不需要管,这部分的复杂度显然为 \(\mathcal{O}(n \log W)\)

  • \(cnt\) 为偶数,那么必定要将 \((0, 0), (1, 1)\) 这样分组,否则这一位就会产生贡献。

那么我们将这一位为 \(0\) 的数和这一位为 \(1\) 的数分别拿下去递归下一位即可。

这部分复杂度也为 \(\mathcal{O}(n \log W)\),因此总复杂度为 \(\mathcal{O}(n \log W)\)

E

显然后面位置的限制大且不会对该位置之前的位置决策产生影响,因此我们考虑从后往前填。

假设将 \(a_i\) 填在后面,那么合法的判定条件为:

\[a_i \nmid \mathrm{LCM}(a_j)(j \ne i) \]

后者显然会爆 \(long long\),通常的处理办法是修改判定条件引入 \(\gcd\)

不难发现可以将条件修改为:

\[a_i < \mathrm{LCM}((a_i, a_j))(j \ne i) \]

可知右边的大小不会超过 \(a_i\),因此是可以直接算的。

由于数据范围很小,直接暴力即可:\(\mathcal{O}(n ^ 3 \log W)\)

F

首先可以注意到一点性质:

  • \(Rx_i \le Rx_j, Ry_i \le Ry_j\) 那么第 \(i\) 个红球是不需要管的。

因此我们首先将不需要管的球去掉,保证:\(Rx_{i - 1} < Rx_i, Ry_{i - 1} > Ry_i(2 \le i \le n)\)

此时我们有如下重要观察:

  • 无论每个蓝球移动到哪里,最终可以覆盖的红球一定是一个区间(可能为空)。

于是问题转化为:

每个蓝球可以选择覆盖任意一个区间,需要一定的花费。目标是每个红球被覆盖至少 \(k\) 次的基础上最小化花费。

这是一个区间 \(k\) 覆盖类型的问题,可以简单地转化为重复 \(k\) 次,每次选择一些蓝球使得所有红球被覆盖至少 \(1\) 次(蓝球选择不重复)。

此时我们不妨先考虑 \(k = 1\) 的情况。

对于 \(i\) 号蓝球,如果需要覆盖 \([l, r]\) 这段红球区间,那么花费为:\(\max(0, Ry_l - By_i) + \max(0, Rx_r - Bx_i)\)

注意到两个维度的花费互不干扰,可以将两个维度拆开考虑。

考虑费用流,对于两个维度值域 \((W)\) 上的所有整点建点,按照如下方式连边:

  • \((X_{i - 1} \rightarrow X_i, 1, \infty), (X_i \rightarrow X_{i - 1}, 0, \infty)(1 \le i \le W)\)
  • \((Y_{i - 1} \rightarrow Y_i, 0, \infty), (Y_i \rightarrow Y_{i - 1}, 1, \infty)(1 \le i \le W)\)
  • \((X_{Rx_i} \rightarrow Y_{Ry_{i + 1}}, 0, \infty)(1 \le i < n)\)
  • \((Y_{By_i}, X_{Bx_i}, 0, 1)(1 \le i \le m)\)

此时 \(Y_{Ry_1} \rightarrow X_{Rx_n}\) 的一点流量所花的最小费用即为 \(k = 1\) 的答案。

根据开始提到的区间 \(k\) 覆盖的解法,只需将流量添加至 \(k\) 时的最小费用即为任意 \(k\) 的答案。

注意到初始费用全非负,使用原始对偶复杂度 \(\mathcal{O(k(n + m)\log (n + m))}\)

posted @ 2021-06-19 11:05  Achtoria  阅读(58)  评论(0编辑  收藏  举报