• 杂题20200419


    CF708E Student's Camp

    有一个高 (n+2) ,宽 (m) 的矩形,每个位置有一个砖块。每天白天,除了最上最下两行,其余的每行最左侧元素有 (p=frac{a}{b}) 的概率消失;每天晚上,其余的每行最右侧元素也有 (p=frac{a}{b}) 的概率消失

    问经过 (k) 天后( (k) 个白天、 (k) 个晚上),这个矩形没有被分割为两个及以上的四连通块的概率 (mod 10^9+7)

    (n, mleq1500; kleq10^5)

    (f_{i, l, r}) 为,第 (i) 行没有消失的部分为区间 ([l, r]) ,前 (i) 行没有被分割为两个及以上的四连通块的概率

    转移: (f_{i, l, r}=p_{l, r}displaystylesum_{[l, r]cap[x, y] eq varnothing} f_{i-1, x, y}) ,其中 (p_{l, r}) 为经过了 (k) 天,第 (i) 行仅剩下区间 ([l, r]) 的概率

    初值 (f_{0, 1, m}=1) ,答案即为 (displaystylesum_{1leq lleq rleq m}f_{n, l, r})

    容易发现对于一行,左侧的消失情况与右侧的消失情况是独立的,因此定义 (p_i) 为经过 (k) 天,消失了 (i) 个砖块的概率,则 (p_{l, r}=p_{l-1} imes p_{m-r})

    限制条件 ([l, r]cap[x, y]=varnothing) 即为 (yge l, xleq r) ,则 (egin{aligned}f_{i, l, r}&=p_{l-1} imes p_{m-r} imesdisplaystylesum_{y=l}^nsum_{x=1}^{min(r, y)}f_{i-1, x, y}\&=p_{l-1} imes p_{m-r} imesdisplaystyle((sum_{y=l}^rsum_{x=1}^yf_{i-1, x, y})+(sum_{y=r+1}^nsum_{x=1}^rf_{i-1, x, y}))end{aligned})

    (A_{i-1, r}=displaystylesum_{y=1}^rsum_{x=1}^yf_{i-1, x, y}, B_{i-1, r}=sum_{y=r+1}^nsum_{x=1}^rf_{i-1, x, y}) ,则 (f_{i, l, r}=p_{l-1} imes p_{m-r} imes(A_{i-1, r}-A_{i-1, l-1}+B_{i-1, r}))

    因此 (A_{i, j}=displaystylesum_{y=1}^jsum_{x=1}^yp_{l-1} imes p_{m-r} imes(A_{i-1, r}-A_{i-1, l-1}+B_{i-1, r}),\B_{i, j}=displaystylesum_{y=j+1}^nsum_{x=1}^jp_{l-1} imes p_{m-r} imes(A_{i-1, r}-A_{i-1, l-1}+B_{i-1, r}))

    把括号拆开,大力前缀和一下,用 (A, B) 代替 (f) ,就能做到 (O(nm))


    CF1236E Alice and the Unfair Game

    有排成一排的 (n) 个箱子,初始时你可以决定将一个小球放在某一个箱子中;Alice 会问你 (m) 个问题,第 (i) 个问题为第 (q_i) 个箱子里是否有球

    你在每一次询问后和第一次询问前,可以将小球从原来的箱子挪到与之相邻的箱子,即每次操作可以将小球所在位置 (i) 变为 (i-1(i>1), i, i+1(i<n)) ;一个操作序列合法当且仅当使得 Alice 的每次询问都为否

    问有多少种不同的状态 ((x, y)) 为,初始时小球在第 (x) 个箱子,在你的最后一次操作后小球位于第 (y) 个箱子,且能找到至少对应的一种合法的操作序列

    (1leq n, mleq10^5)

    注意到固定 (x) 后,合法的 (y) 一定是一段区间,考虑对每种 (x) 顺序执行操作,整体维护合法的 (y) 的区间

    考虑维护左端点,在一次询问前,左端点 (=q_i+1) 的位置一定不会向左拓展,其余的会整体向左拓展 (1) ,可以将所有左端点 (=q_i+1) 的位置合并到左端点 (=q_i+2) 的位置,用并查集实现即可;右端点同理

    注意特判 (n=1) 以及清空


    CF1045G AI robots

    (n) 个元素和一个常数 (K) ,每个元素有三个权值 (x_i, r_i, q_i) ,问满足以下条件的无序二元组 ((i, j), i eq j) 的个数:

    1. (x_iin[x_j-r_j, x_j+r_j])
    2. (x_jin[x_i-r_i, x_i+r_i])
    3. (|q_i-q_j|leq K)
    • (nleq10^5, Kleq20)
    • (0leq x_i, r_i, q_ileq10^9)

    有三种考虑方式:

    1. 升序枚举 (x_i) ,统计 (x_jge x_i) 的满足条件的二元组对数
    2. 升序枚举 (r_i) ,统计 (r_jge r_i) 的满足条件的二元组对数
    3. 升序枚举 (q_i) ,统计 (q_j-q_ileq K) 的满足条件的二元组对数

    1,3 做法都会剩下 (x_iin[x_j-r_j, x_j+r_j], x_jin[x_i-r_i, x_i+r_i]) 的限制,而 2 做法的好处在于,对于 (x_jin[x_i-r_i, x_i+r_i])(j) ,一定满足 (x_iin[x_j-r_j, x_j+r_j])

    接下来就随便搞搞,可以做三维偏序,也可以对于 (i) 枚举满足 (|q_i-q_j|leq K)(q_j) ,时间复杂度 (O(nlog^2 n))(O(nKlog n))


    CF848C Goodbye Souvenir

    给定一个长度为 (n) 的序列 (a_i) ,定义一种数 (x) 在区间 ([l, r]) 的权值为: (x)([l, r]) 最后一次出现的下标 - (x)([l, r]) 第一次出现的下标

    (m) 次操作,单点修改,询问一段区间中每种数的权值和(即只对每种在 ([l, r]) 中出现过的数统计答案)

    (n, mleq10^5)

    (lst_i) 为上一个与 (i) 颜色相同的位置, (nxt_i) 为下一个与 (i) 颜色相同的位置。两种切入方式:

    1. 如果 (lst_i<l) ,则对答案有 (-i) 的贡献,如果 (nxt_i>r) 则对答案有 (i) 的贡献
    2. 记位置 (i) 的权值 (v_i=i-lst_i) ,那么答案即为所有满足 (lst_ige l) 的位置的 (v_i)

    都能看做三维偏序,不过第二种好写一点


    CF1012B Chemical table

    给定一个 (n imes m) 的矩形,一开始有 (q) 个格子被标记。对于任意的 (x1, y1, x2, y2) ,如果 ((x1, y1), (x_1, y_2), (x_2, y_1)) 均被标记,则 ((x_2, y_2)) 也会被标记。问至少需要手动标多少个格子,使得矩形内所有点都被标记

    (n, m, qleq2 imes10^5)

    新建一个二分图,左部有 (n) 个点代表每一行,右部有 (m) 个点代表每一列,矩形中的一个点 ((x, y)) 被看做连接第 (x) 个左部点和第 (y) 个右部点的边

    可以发现,对于一个连通块,必定可以拓展成一个完全二分图,因此只需要将原图缩成一个连通块,即统计连通块个数

    CF1140F Extending Set of Points

    有一个可以插入删除元素的集合 (S{x, y}) ,定义 (S) 的拓展集合为:

    1. 包含 (S) 中所有点 ((x, y))
    2. 对于任意的 (x1, y1, x2, y2) ,如果 ((x1, y1), (x_1, y_2), (x_2, y_1)) 均存在于拓展集合,则 ((x_2, y_2)) 会被加入拓展集合。

    在每次插入或删除元素后,输出当前集合的拓展集合大小

    (q, x, yleq3 imes10^5)

    同样的,如果只有加入操作,用并查集维护,若连接的两个点不在同一个连通块,则增加的拓展集合大小为两点所在连通块大小乘积

    删除操作直接线段树分治即可


    杂题

    给定一个长为 (n) 的序列 (a_i) ,有两种操作:

    1. 给出 (x, y) ,将 (a_x) 修改为 (y)
    2. 给出 (x) ,找到满足 (gcd(a_1, a_2, cdots, a_p) imes(a_1oplus a_2opluscdotsoplus a_p)=x) 的最小的 (p) ,其中 (oplus) 是 xor

    强制在线

    • (n, qleq10^5)
    • (a_iin[0, 10^9])

    由于不同的前缀 (gcd) 值只有 (O(log)) 种,可以暴力考虑每一段前缀 (gcd) 值相同的一段,找到这些连续段可以魔改一下线段树二分,修改、找到所有连续段是 (O(log^2n))

    接下来只需要支持,单点修改,查询一段后缀中满足前缀异或和 (=k) 的最靠前的位置

    发现做法假了/kk,换一种做法()暴力分块,用 hashmap 维护块内权值出现情况,这一部分时间复杂度 (O(nsqrt n))


    杂题

    (n) 个人,有一些人住双人宿舍,其余人住单人宿舍;有一些人与唯一的同桌共用一张双人桌,其余人用单人桌

    求有多少个排列 (p) 满足,原本第 (i) 个人换到 (p_i) 的宿舍以及桌子上后,原本的室友以及同桌关系不变,答案对 (10^9+7) 取模

    (nleq2 imes10^5)

    将宿舍以及同桌关系看做两种不同边权的边,建成一张 (n) 个点的图,显然这张图的每个连通块都是链或者环

    容易发现,如果整张图中有 (x) 个长度为 (k) 的环,有 (x! imes k^x) 种方案;如果整张图中有 (x) 条最左侧最右侧两条边均为宿舍关系,有 (x!2^x) 种方案,两侧边权均为同桌关系同理;如果两侧边权不同,有 (x!) 种方案


    杂题

    给定一棵 (n) 个点的带非负边权树,你需要给每个点确定一个值 (a_i) ,使得 (forall u, vin[1, n], |a_u-a_v|leq dis(u, v)) ,其中 (dis(u, v))(u, v) 在树上的最短路长度

    每个值 (a_i) 只能是 ([l_i, r_i]) 中的值,你可以花费 (x) 的代价( (xge 0) ),使得每个点的限制变成 ([l_i-x, r_i+x])

    问至少有一种确定 (a_i) 的方法时,代价的最小值

    • (nleq10^6)
    • (0leq w, |l_i|, |r_i|leq10^9)

    做法一:

    考虑差分约束系统,新建一个 (0) 号点,向每个点连边权为 (r_i) 的单向边,每个点向 (0) 连边权为 (-l_i) 的单向边,有解当且仅当图中不存在负环

    单向边 ((0, i, r_i)) 相当于限制 (aleq r_i) ,单向边 ((i, 0, -l_i)) 相当于限制 (l_ileq a_i) ,可以将树中的边看做一张完全图, (u, v) 之间的双向边边权为 (dis(u, v)) ,则完全图中的一条双向边 ((u, v, w)) 的限制为 (|a_i-a_j|leq w) ,等价于题目条件

    可以发现并不用二分,因为每个简单环必定经过 (0 o i, j o 0) 两条边,因此只需要求出图中最小环的权值 (x) ,答案即为 (lfloorfrac{min(0, x)}2 floor)

    最小环可以 dijkstra 或 树形dp,时间复杂度 (O(nlog n))(O(n))

    做法二:

    有解当且仅当,存在一组 (a_i) ,使得对于任意一条边 ((u, v, w)) ,满足 (|a_u-a_v|leq w)

    证明:

    • 对于三元组 ((u, v, w)) ,若 (u)(v) 的祖先, (v)(w) 的祖先,存在 (|a_u-a_v|leq dis(u, v), |a_v-a_w|leq dis(v, w)) ,由 (|a+b|leq|a|+|b|) 得到 (|a_u-a_w|leq dis(u, w))

    • 对于三元组 ((u, v, w)) ,若 (lca(v, w)=u) ,存在 (|a_u-a_v|leq dis(u, v), |a_u-a_w|leq dis(u, w)) ,即 (Aleq x, Bleq y) 显然存在 (|A-B|leq x+y) ,即 (|a_v-a_w|leq dis(v, w))

    对于 (u) 的子树, (a_u) 的取值是一段区间,由于上述结论,可以直接从儿子节点转移过来维护,即 (l_u=max(l_v-w), r_u=min(r_v+w)) ,其中 (w)((u, v)) 的边权。现在只需要取到一个 (x) 使得每个节点的取值范围非空,即 (x=lfloorfrac{displaystylemin_{uin[1, n]}(0, r_u-l_u)}2 floor) ,时间复杂度 (O(n))


    有一个连续型随机变量 (y=g(x)) ,密度函数为 (f(x)) ,则有 (E(y)=displaystyleint_{-infty}^{infty}g(x)f(x)dx)

    期望的线性性

    方差

    有一个连续型随机变量 (x) ,密度函数为 (f(x)) ,则 (x) 的方差为 (D(x)=E[(x-E(x))^2]) ,可以将 (E(x)) 看做常数

    可以用更简洁的方式表达: $$egin{aligned}D(x)&=E[x2-2xE(x)+E2(x)]&=E(x2)-2E(x)E(x)+E2(x)&=E(x2)-E2(x)end{aligned}$$

    由期望的性质,可以得到以下结论:

    1. (C) 是常数,则 (D(C)=0)
    2. (a, b) 为常数,则 (D(ax+b)=a^2D(x))
    3. (x, y) 独立时,有 (D(xpm y)=D(x)pm D(y))

    3 的证明:以 (D(x+y)=D(x)+D(y)) 为例

    (egin{aligned}D(x+y)&=E((x+y)^2)-E^2(x+y)\&=E(x^2+2xy+y^2)-(E(x)+E(y))^2\&=E(x^2)+2E(x)E(y)+E(y^2)-E^2(x)-2E(x)E(y)-E^2(y)\&=E(x^2)-E^2(x)+E(y^2)-E^2(y)=D(x)+D(y)end{aligned})

  • 相关阅读:
    【Unity3d】Ray射线初探-射线的原理及用法
    unity3d 的Quaternion.identity和transform.rotation区别是什么
    HOLOLENS的空间管理
    vector3.forward和transform.forward的区别!
    voxel 与 pixel
    图文详解Unity3D中Material的Tiling和Offset是怎么回事
    手机开启HDR后拍照有什么不同?
    什么是UV?
    积和式Permanent在Mathematica中的运算
    [再寄小读者之数学篇](2014-11-20 计算二重积分)
  • 原文地址:https://www.cnblogs.com/Juanzhang/p/12732390.html
Copyright © 2020-2023  润新知