zoukankan      html  css  js  c++  java
  • Global Round 2 题解

    (Global Round 2)题解

    (zhanglichen 2021.1.1)

    (A.Ilya and a Colorful Walk)

    给出一个数组,询问(2)个不相同的数字的最远距离。

    (Solution)

    做法有很多,刚开始来不及细想直接打了发线段树过的,(A)题上线段树,很有精神。

    时间复杂度(O(nlogn))

    (B.Alyona and a Narrow Fridge)

    给出一个高为(h),宽为(2)个冰箱,可以在冰箱里面放置宽为(2)的隔板。

    给出(n)个酒瓶的高度,酒瓶可以放置在冰箱里,每个酒瓶的宽为(1)。但是一个酒瓶不能放在另一个酒瓶的上面,如果它们之间没有隔板。

    现在询问一个最大的(k),使得编号(1)(k)的酒瓶都能放在冰箱里。

    (Solution)

    简单推导后可以发现,对于一个(k),可以把编号(1)(k)的酒瓶从大到小排序,(2)(2)个放,一定可以最优利用空间。考虑到答案具有单调性,可以二分(k)

    时间复杂度(O(n^2logn))

    (C.Ramesses and Corner Inversion)

    给出(2)(n*m)的矩阵(a)(b),单次修改可以选择(a)的一个小矩阵,把它的四个角取反。

    但是不允许单点修改。

    询问能否将(a)变成(b)

    (Solution)

    从上到下、从左到右依次修改即可。

    时间复杂度(O(n^2))

    (D.Frets On Fire)

    给出一个数组(a),每次询问(l)(r),每个(a_i)的范围是(a_i+l)(a_i+r)。询问整个数组覆盖的总范围长度。

    (Solution)

    首先对数组(a)排序并去重,可以确定范围的起点是(a_1+l),范围的终点是(a_n+r)

    现在考虑整个范围哪些地方是空出来的。

    当且仅当(a_i+r<a_{i+1}+l)的时候,(a_i)表示的范围和(a_i+1)表示的范围是不相交的。中间空出来的这段长度(x=a_{i+1}-a_i-(r-l))

    因此我们可以先计算出差分数组,然后对它进行排序。对每一个询问,先二分出差分数组上最小的大于(r-l)的位置(p),答案就是(sum-c[p~n]+(r-l)*(n-p))

    (sum)表示起点到终点的距离,(c[p~n])表示差分数组位置(p)到位置(n)的元素和,这一步可以用前缀和(O(1))得到。

    时间复杂度(O(nlogn))

    (E.Pavel and Triangles)

    给出一个数组(a)(a_i)表示长度为(2_i)的火柴数量。询问这些火柴最多能拼成几个三角形。

    (Solution)

    首先根据幂次的性质,三角形只可能是等边或等腰的。

    一组样例:(5,10),可以得出优先组等腰三角形比等边更优的结论。

    所以就贪心的先组等腰,再组等边即可。

    时间复杂度(O(n))

  • 相关阅读:
    Git的基本使用(只是基本使用)
    GET与POST的比较
    GO开发:链表
    阿里云啊
    以太坊区块和交易存储
    以太坊私有链部署合约
    以太坊go-ethereum签名部分源码解析
    GO开发:接口
    区块链开发:以太坊网络
    Go开发[八]goroutine和channel
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/14221279.html
Copyright © 2011-2022 走看看