• A tow-day exam


    D1

    T1l

    (des:)

    给出一棵树,判断树上两条路径是否相交

    (sol:)

    判断其中一条路径的两个端点以及两端点的 (lca) 是否存在于另一条链上

    由于这是一棵树,任一点为根后这样判断一定是可行的,不存在两条链是一个 ( imes) 的形态

    判断点是否在树上的一条路径上的时间复杂度为 (O(logn)),树剖处理出所有的链,判断该点是否存在于某一区间即可

    T2

    (des)

    定义 (f(l, r) = max(a_i - a_j), 其中 l <= i,j <= r)

    求 $$sum_{i = 1} ^ {n} sum_{j = i} ^ {n} f(i, j)$$

    (sol)

    考虑转化

    该问题等价于所有区间的最大值 - 所有区间的最小值

    这样的话考虑每个点作为区间最大值所带来的贡献

    (pre_i) 表示最大的 (j) 使得 (a_j > a_i 且 j <= i)

    (bhd_i) 表示最小的 (j) 使得 (a_j > a_i 且 j >= i)

    显然 (a_i) 所产生的贡献为 ((i - pre_i + 1 + bhd_i - i + (i - pre_i) * (bhd_i - i)) * a_i)

    对于最小值产生的负贡献依旧如此

    对于 (pre, bhd) 可以用单调栈线性求出

    T3

    (des)

    给出一棵树

    定义 (f(l, r)) 表示为了使得 ([l, r]) 号点联通所需要的最小边数

    求 $$sum_{i = 1} ^ {n} sum_{j = i} ^ {n} f(i, j)$$

    (sol)

    D2

    T1

    (des)
    二位直角坐标系上存在两点 ((x_1, y_1) (x_2, y_2))
    每次可以使得 (x_1 + 1, y + 1) 或者 (x_1 + 1, y_1 - 1) 使得较靠左下角的点到达较靠右上角的点
    只有一次使得 (x_1 + 1) 或者 (y_1 + 1) 的机会

    (sol)

    首先可以给方格黑白染色,发现两个颜色的点无法相互到达。如果起点和终点是不同色的,可以使用一次上下左右走的机会,使两个点位于处于同样的颜色。分别计算向上下左右走后的花费,取最小值。

    考虑计算花费:
    如果可以题目是上下左右走,那么两点的花费就是 (abs(s1-s2)+abs(t1-t2))
    那么斜着走也是同理,假设将方格旋转 (45) 度,求出旋转后的坐标,答案同样可以使用上面的公式。
    其实std只需要一行

    T2

    (des)
    存在长度为 (l1 >= 3) 的字符串 (s1),
    向其后添加长度为 (l2 = 2 或 3) 的字符串 (s2)
    求所有可能的 (s2)
    相邻的 (s2) 不能相同
    相同就很简单啦

    (sol)

    最重要的一点就是 (s1) 任意
    这样的话对于一个位置 (x), 若用 (x) 当做某种 (s2) 的首字母
    只需要满足该字符串的后面的字符串全部合法就可以了
    因为前面的只要长度 (>= 3) 都可以当做某个 (s1)
    从后往前 dp
    (f2) 表示 (i, i +1) 可以计入答案
    (f3) 表示 (i, i +1, i + 2) 可以计入答案
    转移

  • 相关阅读:
    模拟器安装.apk包_夜神模拟器
    SDK安装报错_2019
    Jenkins安装插件方法
    Jenkins安装
    Python项目第三方库安装_pip freeze命令
    深入理解Java虚拟机—内存分配
    深入理解Java虚拟机—垃圾回收 下
    深入理解Java虚拟机—垃圾回收 上
    深入理解Java虚拟机—OutOfMemoryError异常
    深入理解Java虚拟机—Java内存区域
  • 原文地址:https://www.cnblogs.com/shandongs1/p/9691415.html
Copyright © 2020-2023  润新知