• Atcoder ARC-058


    ARC058(2020.7.4)

    A

    从高到低依次填入能填的最小值即可。

    B

    首先可以发现这个区间实际上只有横着的一条边有用,那么我们可以在边界上枚举中转点使得不经过非法区域即可。

    C

    挺神的一道题。首先我们会发现如果直接算出合法序列非常不好做,因为可能一个合法序列中可能有多个满足条件的句子,那么很难设计一种状态不会记重,那么我们考虑容斥,算出不合法的序列。我们发现我们需要关注的实际上是原序列中的一段子串,并且需要判断该子串是否能能形成满足条件的句子,事实上这里的子串长度不会超过 (X + Y + Z le 17) 于是我们可以考虑 (dp),令 (dp_{i, j, k, cdots}) 为到第 (i) 为位置,最后 (17) 位分别为 (j, k, cdots) 的总共不合法序列,首先与处理一下每个子串是否合法就可以做到 (O(n 10 ^ {X + Y + Z}))。现在我们考虑这样一个表示法,比如我们将 (2) 表示成 (10),将 (4) 表示成 (1000) 即将 (x) 表示成 (1000cdots) 后面 (x - 1)(0) 的形式,那么两个数加起来比如 (2 + 4 = 101000) 倒数第 (6) 位就变成了 (1),那么对于任意一个二进制串如果他在倒数 (X + Y + Z, Y + Z, Z) 的位置上为 (1) 那么这个子串就一定是一个满足条件的句子。换种说法,对于一个二进制串 (S),和答案串即只有倒数 (X + Y + Z, Y + Z, Z) 的位置上为 (1) 的串 (Ans) 满足 (S & Ans = Ans) 那么 (S) 就是一个满足条件的子串。那么现在我们就可以将 (dp) 的最后暴力枚举的位置改成这样的状压的形式,再去看我们关心的最后 (X + Y + Z) 个位置,实际上就是二进制串下的最后 (X + Y + Z) 个位置,那么我们只需要记录最后 (X + Y + Z) 的答案即可,于是复杂度变成了 (O(n 2 ^ {X + Y + Z})).

    D

    字符串,咕咕咕....

    GO!
  • 相关阅读:
    AnyConnect使用说明(手机版)
    AnyConnect使用说明(电脑版Windows)
    Linux中MySQL中文乱码问题
    Redis的最常被问到知识点总结
    DML、DDL、DCL是什么?
    刨死你系列——手撕ArrayList
    刨死你系列——LinkedHashMap剖析(基于jdk1.8)
    mysql架构与存储引擎 (Myisam与Innodb)
    面试有关TCP常问的几个问题
    刨死你系列——HashMap剖析(基于jdk1.8)
  • 原文地址:https://www.cnblogs.com/Go7338395/p/13675899.html
Copyright © 2020-2023  润新知