• 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!
  • 相关阅读:
    Linux系统模拟端口开放程序port 软件的基本使用
    Docker19.03.13离线安装-Docker根目录-Docker常用操作--NVIDIA Docker
    springboot项目启动与停止命令
    两种设备选型的主要性能指标
    docker nginx配置
    使用shell+java 抓取NHK广播
    小程序的测试方法
    adb logcat 查看Android APP日志
    IE11判断是否全是中文的时候无效写法
    C#控制器微信通过encryptedData,iv,Code获取用户信息
  • 原文地址:https://www.cnblogs.com/Go7338395/p/13675899.html
Copyright © 2020-2023  润新知