zoukankan      html  css  js  c++  java
  • 2020 年集训队作业 Part 1

    向 CXY 学习!

    大概一天尽量更 3 道题,鸽了可以催一催,说不定就更了(

    标签:

    (color{red}{12345}):代码难度,(color{blue}{12345}):思维难度,(color{green}{12345}):巧妙程度/优美程度。

    (dagger):已完成,暂鸽,(Psi):未完成。

    T1 CF504E Misha and LCP on Tree (color{red}3color{blue}1color{green}1)

    非常套路的题。

    LCP 问题可以考虑二分+哈希,那么我们只需要判断两条有向链是否相等就好了,这个可以维护一个向上的哈希值和向下的哈希值计算出来,时间复杂度 (O(nlog^2 n))

    AC 记录

    T2 CF505E Mr. Kitayuta vs. Bamboos (color{red}2color{blue}2color{green}2)

    WC2021 讲课题。

    最小化最大值考虑二分,同时考虑时间倒流,我们让所有竹子最开始高度都是二分出的 (mid),每一轮找到一个最小的 (k) 个数将它加 (p),如果 (k) 轮内没有小于 (0) 的数就表示这个 (mid) 是可行的。

    每一轮找最小的数可以维护一下每个数变成 (0) 的时间,保存在大根堆里即可,时间复杂度 (O((n+mk)log nlog a))

    AC 记录

    T3 CF506E Mr. Kitayuta's Gift (color{red}3color{blue}5color{green}5)

    我们发现决定最终结果的是最后的串,与插入的方式无关,所以常规的 dp 无法去重。

    于是我们考虑建立一个类似自动机的结构,又因为看到 (|s|leqslant 200,1leqslant nleqslant 10^9),所以又想到矩阵加速自动机上的 dp,那么我们的大致方向就已经确定了。

    鸽了。

    AC 记录

    T4 CF512D Fox And Travelling (color{red}3color{blue}3color{green}2)

    容易发现题意是一个类似拓扑排序的过程,进一步观察可以得到环上的所有点一定不能被选中,且去掉环之后每个连通块与环相邻的点一定是最后被选中的。(显然没有两个这样的点)

    那么我们的问题转化为有/无根树的答案计数,我们算完之后将答案卷起来就可以了。而且实际上无根树的答案只需要钦定每个位置为根并去重就好了,去重只需要把选 (k) 个点的答案除以 (n-k) 即可。((n) 为树结点个数)

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

    AC 记录

    T5 CF516D Drazil and Morning Exercise (color{red}3color{blue}2color{green}1)

    偏套路的二合一。

    首先计算权值显然可以使用换根 dp 在 (O(n)) 内解决。

    由于询问是问的 (max-minleqslant l) 这一经典模型,我们可以给所有点按照权值排序然后尺取法解决,时间复杂度 (O(nq))

    AC 记录

    T6 CF516E Drazil and His Happy Friends (color{red}3color{blue}5color{green}3)

    鸽了。

    AC 记录

    T7 CF521D Shop (color{red}2color{blue}1color{green}1)

    简单题。

    观察可以发现一定存在一种最优操作顺序满足先赋值,再加法,后乘法。

    由于最后要最大化所有数的乘积,所以考虑直接把赋值和加法转化为乘法,这样我们只需要贪心选出前 (m) 个乘法操作即可。

    给同一个位置的赋值显然只会选择最大的,然后我们就可以把赋值转化为加法了。加法操作显然可以从大到小执行,那么变化量可以直接计算出来。

    最后选完最大的 (m) 个乘法操作输出方案的时候记得按照赋值、加法、乘法的顺序排个序,时间复杂度 (O(nlog n))

    AC 记录

    T8 CF521E Cycling City (color{red}2color{blue}2color{green}1)

    考虑三条完全不相交的路径实际上就是一个环中间一条弦,我们求出原图的 dfs 生成树,那么可以直接这样构造:

    image

    (蒯的洛谷题解图片)

    那么我们每一条路径都暴力在树上覆盖,如果有重复覆盖的位置就直接输出就好了,时间复杂度 (O(n+m))

    AC 记录

    T9 CF526F Pudding Monsters (color{red}2color{blue}3color{green}2)

    每行每列一个棋子显然可以转化为一个长度为 (n) 的排列,那么恰好有 (k) 个棋子就等价于这个排列在这些位置的数字连续,即 (max-min+1=len)

    由于 (lenleqslant max-min+1),因此满足条件的排列都可以让 (max-min-len) 取到最小值 (-1)

    套路地固定右端点,可以用单调栈维护出每个后缀权值的 (max)(min),再用一颗线段树维护每个左端点的答案,每次移动右端点就在更新单调栈的同时更新一下线段树,最后加上线段树最小值出现次数即可。(由于可以取长度为 (1) 的子段,所以(-1) 必定为最小值)

    时间复杂度 (O(nlog n))

    AC 记录

    T10 CF526G Spiders Evil Plan (color{red}3color{blue}4color{green}3)

    鸽了。

    AC 记录

    T30 CF575I Robots protection (color{red}3color{blue}2color{green}2)

    首先容易发现直角三角形的方向并不重要,我们旋转坐标系就可以等价,于是我们只需要考虑一种情况。

    我们考虑直角三角形实际上是要求点满足 (xgeqslant a,ygeqslant b,x+yleqslant a+b+len),我们带上时间就是一个四维偏序,三个 (log) 貌似过不了。

    (xgeqslant a) 以及 (ygeqslant b) 进行容斥,可以发现总方案数减 (x<a)(y<b)(x<a,y<b) 只有最后一个是四维偏序,而由于 (x+y<a+bleqslant a+b+len),所以可以去掉一维变成三维偏序。

    用二维树状数组维护即可,时间复杂度 (O(nlog^2 n))

  • 相关阅读:
    第 1 章 代码无错便是优?——简单工厂模式
    [转载]由浅入深探究mysql索引结构原理、性能分析与优化
    jquery中 $.expr使用实例介绍
    jQuery UI Widget(1.8.1)工作原理
    asp.net url重写
    CJL.0.1.js
    React Context 的用法
    小程序组件使用
    深入理解es5中Object.defineProperty()
    React合成事件
  • 原文地址:https://www.cnblogs.com/xiaoziyao/p/15391712.html
Copyright © 2011-2022 走看看