• 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!
  • 相关阅读:
    小编见过的验证方式汇总
    Burp Suite Professional 针对APP抓包篡改数据提交【安全】
    关于Chrome 67 以后版本无法离线安装扩展的解决方法
    Postman 中上传图片的接口怎么做参数化呢?
    字符串-不同的编码格式下所占用的字节数【转】
    Java RandomAccessFile用法 【转】
    URI和URL的区别 【转】
    Java多线程-线程的同步与锁【转】
    浅谈Java多线程的同步问题 【转】
    Java中浮点数的精度问题 【转】
  • 原文地址:https://www.cnblogs.com/Go7338395/p/14902323.html
Copyright © 2020-2023  润新知