zoukankan      html  css  js  c++  java
  • 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!
  • 相关阅读:
    《大型网站技术架构》-读书笔记一:大型网站架构演化
    网站性能测试指标及网站压力测试
    PHP生成二维码
    数据结构与算法之PHP实现队列、栈
    数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)
    PHP 堆 栈 数据段 代码段 存储的理解
    堆”,"栈","堆栈","队列"以及它们的区别
    c#加密
    Sequence contains no elements : LINQ error
    asp.net core2.0 连接mysql和mssql
  • 原文地址:https://www.cnblogs.com/Go7338395/p/13675899.html
Copyright © 2011-2022 走看看