zoukankan      html  css  js  c++  java
  • Codeforces Round #620 (Div. 2) 题解

    A

    判断((a+b)|(y-x))即可。

    code

    B

    贪心的枚举互相匹配的前后缀,再寻找剩下的串中是否有合法的可作为中间位置的串即可。

    code

    C

    维护一下当前能到达的温度的最大值和最小值,再和每个人的需求比一下即可。

    code

    D

    发现一串连续的(<)已经构成了LIS,那么最长LIS则要求所有的(<)能连在一起,最短LIS则要求每段LIS互相独立无法拼接。

    可以维护一头一尾两个指针表示值域,(<)的使用尾指针,(>)的使用头指针,通过控制(>)前的元素段与段之间的递增/递减来实现最长LIS/最短LIS间的切换。

    code

    E

    做过CSP-J2019的T4的都应该知道:我们需要求出奇偶性不同的两条最短路长。由于重复经过一条路径只会给最短路带来偶数次影响,所以只能通过走环来强制改变路径的奇偶性。

    不强制走环的最短路一定是原树上的最短路,强制走环的话可以考虑强制走加的边((u,v))这样虽然有两种情况但是奇偶性是一致的(画个图证一下就好了)。

    code

    F1&F2

    (f_{i,j})为第(i)天,上一天在位置(j)架起了照相机的最大值,则有。

    [f_{i,j}=max(f_{i-1,p}+w(i,p)-mathrm{intersect}(i,j,p)) ]

    其中(w(i,j)=sum_{p=j}^{j+k-1}a_{i,p}), (mathrm{intersect}(i,j,p))表示(w(i,j))(w(i,p))的相交部分。

    F1的话发现(mathrm{intersect}(i,j,p)=0)的部分可以通过预处理前缀/后缀的最大值就可以(O(1))转移,不为(0)的部分可以暴力(O(k))转移。

    F2的话考虑(a_{i,j})会与(f_{i-1,j-k+1},f_{i-1,j-k+2},cdots,f_{i-1,j})交叉,是一段区间。于是每一次可以用线段树维护(f_{i-1,p}-mathrm{intersect}(i,j,p)).当枚举的(j o j+1)时,至多只会有两个(a)的值的贡献被加上/删去,线段树上直接区间修改即可。

    code(F2)

  • 相关阅读:
    C#(16进制数据之间的转换)
    解决windows7您当前无权访问该文件夹的问题
    获取本周的周一和周日
    在GridView中使用Cache
    在C#中完成海量数据的批量插入和更新
    母版页中对控件ID的处理
    PostgreSQL函数和运算符(二)
    js检查首字符是否是英文字符
    Asp.net Ajax实现拖放实战
    js移除数组中指导位置元素
  • 原文地址:https://www.cnblogs.com/encodetalker/p/12446657.html
Copyright © 2011-2022 走看看