zoukankan      html  css  js  c++  java
  • 题解-AGC012

    AGC012B Splatter Painting [*easy]

    反着做,对于每个点 (x), 记录 (f(x)) 表示最大的 (d) 使得对 (x) 进行了一个长度为 (d) 的操作。

    然后对于一个操作把和 (x) 距离不超过 (k) 的点染色,拆分成把他旁边所有距离不超过 (k - 1) 的点染色。

    如果 (k le f(x)) ,那么不执行操作。

    ac link

    时间复杂度 (Theta(nd))

    AGC012C Tautonym Puzzle [*medium]

    在左边放 (1...100),答案是右边的上升子序列个数。

    假设空序列也算进答案。考虑从小往大放,放左边子序列个数增加 (1),右边子序列个数乘 (2)

    二进制拆分即可。时间复杂度 (Theta(log n))

    ac link

    AGC012D Colorful Balls [*easy]

    考虑两个同色的点都可以和同色最小值交换,那么他们俩可以交换。如果一个点可以和同色的最小值交换,那么把这个点的值视为这个同色最小值。

    然后考虑不同色的点,那么如果一个点和其他不同色的点交换 (只需要判其他点的 (min)) ,那么他也能和 能和不同色点交换的点 交换,于是这些点都可以互相交换,组合数学算一下答案即可。

    时间复杂度 (Theta(n))

    ac link

    AGC012E Camel and Oases [*hard]

    对于第 (i) 个问题,可以转化为把整个序列拆分成 (1 + log v) 个序列(拆分后可以重新排列序列顺序),使得第 (1) 个序列包含了 (i),且第 (i) 个序列的相邻两点的差 (le frac{v}{2^{i-1}})

    记录 (fl_{i, j}) 表示第 (j) 个序列使用在 (i) 身上能到达的最小左端点,让 (fr_{i, j}) 则为最大右端点。

    考虑记录 (pre_{mask}) 表示使用了 (mask) 中所有二进制位为 (1) 的位置已经被使用了的能到达的最大前缀位置,记录 (suf_{mask}) 为能到达的最大后缀位置。

    答案就如果对于一个位置 (i) 满足 (pre_{mask} ge fl_{i, 1} - 1)(suf_{mask oplus MAXN} le fr_{i, 1} + 1),那么就是可行的。

    但是这样是 (O(nv)) 的,不能通过。

    考虑用第 (1) 个序列来把序列分段 (如果相邻两个距离 (> v) 就断开),如果段数 (> log v + 1),那么一定不可行。

    所以对于每一段判断一下答案可不可行即可。

    时间复杂度 (Theta((v + n) log v))

    ac link

    AGC012F Prefix Median

    待填坑

  • 相关阅读:
    go ERROR invalid character '<' looking for beginning of value
    C#实现将网址生成二维码图片
    二、WPF入门教程——Bingding学习
    一、WPF入门教程——创建WPF项目
    C#实现DataTable行列转置
    VBS整蛊代码
    Task.WhenAll和Task.WhenAny
    Task.WaitAll和Task.WaitAny
    CancellationTokenSource
    组合ContinueWith
  • 原文地址:https://www.cnblogs.com/zkyJuruo/p/14259962.html
Copyright © 2011-2022 走看看