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) 为奇数,那么意味着这一位必定会产生贡献。

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

直接暴力将这些数暴力插入 ( t 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 mid mathrm{LCM}(a_j)(j e i) ]

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

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

[a_i < mathrm{LCM}((a_i, a_j))(j e 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} ightarrow X_i, 1, infty), (X_i ightarrow X_{i - 1}, 0, infty)(1 le i le W))
  • ((Y_{i - 1} ightarrow Y_i, 0, infty), (Y_i ightarrow Y_{i - 1}, 1, infty)(1 le i le W))
  • ((X_{Rx_i} ightarrow 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} ightarrow X_{Rx_n}) 的一点流量所花的最小费用即为 (k = 1) 的答案。

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

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

GO!
原文地址:https://www.cnblogs.com/Go7338395/p/14902323.html