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

    AGC012


    AGC012B Splatter Painting

    luogu

    这题是被指导的,设 (f(u)) 表示最大的 (d) 使所有距离 (u) (d) 以内的节点都被染色了。

    然后每次 bfs,如果到一个点它被覆盖的新 (d>f(u)) 就继续遍历它的相邻节点。

    这样的时间复杂度是 (Theta(ND))

    aclink


    AGC012C Tautonym Puzzle

    luogu

    容易走进陷阱:用每段连续的数构成 (2^k-1) 然后拼成答案,这样可能是不行的?

    正解:右边放 (1 o 100),然后答案是左边的上升子序列个数。

    如果左边只有 (1),答案是 (1);否则每次把一个更大的数加在左边的前面,上升子序列数量 (+1);否则上升子序列 ( imes 2)

    然后对答案二进制拆分用个列表(题解中好像不用列表)维护一下即可。

    aclink


    AGC012D Colorful Balls

    luogu

    首先可以如果可以交换的间连一条边,那么每个联通块可以换成任意排列。

    所以目的就是划出每个联通块,然后排列组合一下就好了。

    先利用相同颜色和 (x):找到每个颜色中最小的,然后别的看看能不能和它合上即可。

    如果某个颜色的一个球没有和最小的合上,用 (y)

    • 如果它的颜色的最小的就是全局最小的,看看它能不能和次小的颜色合上。

    • 否则,看看它能不能和全局最小的合上。

    然后再看看每个颜色的最小的可以不可以和全局最小的合上即可。

    aclink


    AGC012E Camel and Oases

    luogu

    看成一个分成图,每层图的每个联通块是一段,每层图选一个联通块,使得每个点都被走过。

    很明显这个分成图的层数是 (Theta(log v)) 级别的。

    尝试 dp,因为题目多次规定第一层选的联通块,所以想到预处理前后缀。

    假如是前缀,有两个关键信息:用了的层和选了的前缀长度。

    可以以前者为 dp 状态,经过预处理后容易 dp 出后者。

    然后可以发现第一层的联通块数如果超过 (Theta(log v)) 个是无解的。

    所以可以枚举第一层的联通块和左边前缀用了的层数,容易得到答案。

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

    aclink


    AGC012F Prefix Median

    luogu

    (a_i=i),考虑能当第 (i) 个中位数的有那些数:([i,2n-2-i])

    满足这个条件的同时,还需要满足 (forall j<i,j otin (a_i,a_i+1)) 中位数序列就必然是合法的。

    所以如果从后往前选数,每次选数 (a_i) 前面就不能选 ((a_i,a_i+1)) 的数了。

    所以设 (f(i,l,r)) 表示从后往前选到第 (i) 个数,比当前数小的有 (l) 个可选,比当前数大的有 (r) 个可选的方案数,dp 即可。

    aclink

  • 相关阅读:
    家庭作业有益吗?
    视图、触发器、事务、存储过程、函数
    Navicat使用和pymysql
    表查询
    外键
    MySQL表操作
    进程池线程池、协程
    全局解释器锁及其他用法
    线程
    进程
  • 原文地址:https://www.cnblogs.com/George1123/p/14259005.html
Copyright © 2011-2022 走看看