杂题20200419
CF708E Student's Camp
有一个高 \(n+2\) ,宽 \(m\) 的矩形,每个位置有一个砖块。每天白天,除了最上最下两行,其余的每行最左侧元素有 \(p=\frac{a}{b}\) 的概率消失;每天晚上,其余的每行最右侧元素也有 \(p=\frac{a}{b}\) 的概率消失
问经过 \(k\) 天后( \(k\) 个白天、 \(k\) 个晚上),这个矩形没有被分割为两个及以上的四连通块的概率 \(\bmod 10^9+7\)
\(n,\ m\leq1500;\ k\leq10^5\)
记 \(f_{i,\ l,\ r}\) 为,第 \(i\) 行没有消失的部分为区间 \([l,\ r]\) ,前 \(i\) 行没有被分割为两个及以上的四连通块的概率
转移: \(f_{i,\ l,\ r}=p_{l,\ r}\displaystyle\sum_{[l,\ r]\cap[x,\ y]\neq \varnothing} f_{i-1,\ x,\ y}\) ,其中 \(p_{l,\ r}\) 为经过了 \(k\) 天,第 \(i\) 行仅剩下区间 \([l,\ r]\) 的概率
初值 \(f_{0,\ 1,\ m}=1\) ,答案即为 \(\displaystyle\sum_{1\leq l\leq r\leq m}f_{n,\ l,\ r}\)
容易发现对于一行,左侧的消失情况与右侧的消失情况是独立的,因此定义 \(p_i\) 为经过 \(k\) 天,消失了 \(i\) 个砖块的概率,则 \(p_{l,\ r}=p_{l-1}\times p_{m-r}\)
限制条件 \([l,\ r]\cap[x,\ y]=\varnothing\) 即为 \(y\ge l,\ x\leq r\) ,则 \(\begin{aligned}f_{i,\ l,\ r}&=p_{l-1}\times p_{m-r}\times\displaystyle\sum_{y=l}^n\sum_{x=1}^{\min(r,\ y)}f_{i-1,\ x,\ y}\\&=p_{l-1}\times p_{m-r}\times\displaystyle((\sum_{y=l}^r\sum_{x=1}^yf_{i-1,\ x,\ y})+(\sum_{y=r+1}^n\sum_{x=1}^rf_{i-1,\ x,\ y}))\end{aligned}\)
记 \(A_{i-1,\ r}=\displaystyle\sum_{y=1}^r\sum_{x=1}^yf_{i-1,\ x,\ y},\ B_{i-1,\ r}=\sum_{y=r+1}^n\sum_{x=1}^rf_{i-1,\ x,\ y}\) ,则 \(f_{i,\ l,\ r}=p_{l-1}\times p_{m-r}\times(A_{i-1,\ r}-A_{i-1,\ l-1}+B_{i-1,\ r})\)
因此 \(A_{i,\ j}=\displaystyle\sum_{y=1}^j\sum_{x=1}^yp_{l-1}\times p_{m-r}\times(A_{i-1,\ r}-A_{i-1,\ l-1}+B_{i-1,\ r}),\\B_{i,\ j}=\displaystyle\sum_{y=j+1}^n\sum_{x=1}^jp_{l-1}\times p_{m-r}\times(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\) 个箱子,且能找到至少对应的一种合法的操作序列
\(1\leq n,\ m\leq10^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\neq j\) 的个数:
- \(x_i\in[x_j-r_j,\ x_j+r_j]\)
- \(x_j\in[x_i-r_i,\ x_i+r_i]\)
- \(|q_i-q_j|\leq K\)
- \(n\leq10^5,\ K\leq20\)
- \(0\leq x_i,\ r_i,\ q_i\leq10^9\)
有三种考虑方式:
- 升序枚举 \(x_i\) ,统计 \(x_j\ge x_i\) 的满足条件的二元组对数
- 升序枚举 \(r_i\) ,统计 \(r_j\ge r_i\) 的满足条件的二元组对数
- 升序枚举 \(q_i\) ,统计 \(q_j-q_i\leq K\) 的满足条件的二元组对数
1,3 做法都会剩下 \(x_i\in[x_j-r_j,\ x_j+r_j],\ x_j\in[x_i-r_i,\ x_i+r_i]\) 的限制,而 2 做法的好处在于,对于 \(x_j\in[x_i-r_i,\ x_i+r_i]\) 的 \(j\) ,一定满足 \(x_i\in[x_j-r_j,\ x_j+r_j]\)
接下来就随便搞搞,可以做三维偏序,也可以对于 \(i\) 枚举满足 \(|q_i-q_j|\leq K\) 的 \(q_j\) ,时间复杂度 \(O(n\log^2 n)\) 或 \(O(nK\log n)\)
CF848C Goodbye Souvenir
给定一个长度为 \(n\) 的序列 \(a_i\) ,定义一种数 \(x\) 在区间 \([l,\ r]\) 的权值为: \(x\) 在 \([l,\ r]\) 最后一次出现的下标 - \(x\) 在 \([l,\ r]\) 第一次出现的下标
有 \(m\) 次操作,单点修改,询问一段区间中每种数的权值和(即只对每种在 \([l,\ r]\) 中出现过的数统计答案)
\(n, m\leq10^5\)
记 \(lst_i\) 为上一个与 \(i\) 颜色相同的位置, \(nxt_i\) 为下一个与 \(i\) 颜色相同的位置。两种切入方式:
- 如果 \(lst_i<l\) ,则对答案有 \(-i\) 的贡献,如果 \(nxt_i>r\) 则对答案有 \(i\) 的贡献
- 记位置 \(i\) 的权值 \(v_i=i-lst_i\) ,那么答案即为所有满足 \(lst_i\ge l\) 的位置的 \(v_i\) 和
都能看做三维偏序,不过第二种好写一点
CF1012B Chemical table
给定一个 \(n\times m\) 的矩形,一开始有 \(q\) 个格子被标记。对于任意的 \(x1,\ y1,\ x2,\ y2\) ,如果 \((x1,\ y1),\ (x_1,\ y_2),\ (x_2,\ y_1)\) 均被标记,则 \((x_2,\ y_2)\) 也会被标记。问至少需要手动标多少个格子,使得矩形内所有点都被标记
\(n,\ m,\ q\leq2\times10^5\)
新建一个二分图,左部有 \(n\) 个点代表每一行,右部有 \(m\) 个点代表每一列,矩形中的一个点 \((x,\ y)\) 被看做连接第 \(x\) 个左部点和第 \(y\) 个右部点的边
可以发现,对于一个连通块,必定可以拓展成一个完全二分图,因此只需要将原图缩成一个连通块,即统计连通块个数
CF1140F Extending Set of Points
有一个可以插入删除元素的集合 \(S\{x,\ y\}\) ,定义 \(S\) 的拓展集合为:
- 包含 \(S\) 中所有点 \((x,\ y)\)
- 对于任意的 \(x1,\ y1,\ x2,\ y2\) ,如果 \((x1,\ y1),\ (x_1,\ y_2),\ (x_2,\ y_1)\) 均存在于拓展集合,则 \((x_2,\ y_2)\) 会被加入拓展集合。
在每次插入或删除元素后,输出当前集合的拓展集合大小
\(q,\ x,\ y\leq3\times10^5\)
同样的,如果只有加入操作,用并查集维护,若连接的两个点不在同一个连通块,则增加的拓展集合大小为两点所在连通块大小乘积
删除操作直接线段树分治即可
杂题
给定一个长为 \(n\) 的序列 \(a_i\) ,有两种操作:
- 给出 \(x,\ y\) ,将 \(a_x\) 修改为 \(y\)
- 给出 \(x\) ,找到满足 \(\gcd(a_1,\ a_2,\ \cdots,\ a_p)\times(a_1\oplus a_2\oplus\cdots\oplus a_p)=x\) 的最小的 \(p\) ,其中 \(\oplus\) 是 xor
强制在线
- \(n,\ q\leq10^5\)
- \(a_i\in[0,\ 10^9]\)
由于不同的前缀 \(\gcd\) 值只有 \(O(\log)\) 种,可以暴力考虑每一段前缀 \(\gcd\) 值相同的一段,找到这些连续段可以魔改一下线段树二分,修改、找到所有连续段是 \(O(\log^2n)\) 的
接下来只需要支持,单点修改,查询一段后缀中满足前缀异或和 \(=k\) 的最靠前的位置
发现做法假了/kk,换一种做法()暴力分块,用 hashmap 维护块内权值出现情况,这一部分时间复杂度 \(O(n\sqrt n)\)
杂题
有 \(n\) 个人,有一些人住双人宿舍,其余人住单人宿舍;有一些人与唯一的同桌共用一张双人桌,其余人用单人桌
求有多少个排列 \(p\) 满足,原本第 \(i\) 个人换到 \(p_i\) 的宿舍以及桌子上后,原本的室友以及同桌关系不变,答案对 \(10^9+7\) 取模
\(n\leq2\times10^5\)
将宿舍以及同桌关系看做两种不同边权的边,建成一张 \(n\) 个点的图,显然这张图的每个连通块都是链或者环
容易发现,如果整张图中有 \(x\) 个长度为 \(k\) 的环,有 \(x!\times k^x\) 种方案;如果整张图中有 \(x\) 条最左侧最右侧两条边均为宿舍关系,有 \(x!2^x\) 种方案,两侧边权均为同桌关系同理;如果两侧边权不同,有 \(x!\) 种方案
杂题
给定一棵 \(n\) 个点的带非负边权树,你需要给每个点确定一个值 \(a_i\) ,使得 \(\forall\ u,\ v\in[1,\ n],\ |a_u-a_v|\leq dis(u,\ v)\) ,其中 \(dis(u,\ v)\) 为 \(u,\ v\) 在树上的最短路长度
每个值 \(a_i\) 只能是 \([l_i,\ r_i]\) 中的值,你可以花费 \(x\) 的代价( \(x\ge 0\) ),使得每个点的限制变成 \([l_i-x,\ r_i+x]\)
问至少有一种确定 \(a_i\) 的方法时,代价的最小值
- \(n\leq10^6\)
- \(0\leq w,\ |l_i|,\ |r_i|\leq10^9\)
做法一:
考虑差分约束系统,新建一个 \(0\) 号点,向每个点连边权为 \(r_i\) 的单向边,每个点向 \(0\) 连边权为 \(-l_i\) 的单向边,有解当且仅当图中不存在负环
单向边 \((0,\ i,\ r_i)\) 相当于限制 \(a\leq r_i\) ,单向边 \((i,\ 0,\ -l_i)\) 相当于限制 \(l_i\leq a_i\) ,可以将树中的边看做一张完全图, \(u,\ v\) 之间的双向边边权为 \(dis(u,\ v)\) ,则完全图中的一条双向边 \((u,\ v,\ w)\) 的限制为 \(|a_i-a_j|\leq w\) ,等价于题目条件
可以发现并不用二分,因为每个简单环必定经过 \(0\to i,\ j\to 0\) 两条边,因此只需要求出图中最小环的权值 \(x\) ,答案即为 \(\lfloor\frac{\min(0,\ x)}2\rfloor\)
最小环可以 dijkstra 或 树形dp,时间复杂度 \(O(n\log 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)\) ,即 \(A\leq x,\ B\leq 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=\lfloor\frac{\displaystyle\min_{u\in[1,\ n]}(0,\ r_u-l_u)}2\rfloor\) ,时间复杂度 \(O(n)\)
有一个连续型随机变量 \(y=g(x)\) ,密度函数为 \(f(x)\) ,则有 \(E(y)=\displaystyle\int_{-\infty}^{\infty}g(x)f(x)dx\)
期望的线性性
方差
有一个连续型随机变量 \(x\) ,密度函数为 \(f(x)\) ,则 \(x\) 的方差为 \(D(x)=E[(x-E(x))^2]\) ,可以将 \(E(x)\) 看做常数
可以用更简洁的方式表达: $$\begin{aligned}D(x)&=E[x2-2xE(x)+E2(x)]\&=E(x2)-2E(x)E(x)+E2(x)\&=E(x2)-E2(x)\end{aligned}$$
由期望的性质,可以得到以下结论:
- \(C\) 是常数,则 \(D(C)=0\)
- \(a,\ b\) 为常数,则 \(D(ax+b)=a^2D(x)\)
- 当 \(x,\ y\) 独立时,有 \(D(x\pm y)=D(x)\pm D(y)\)
3 的证明:以 \(D(x+y)=D(x)+D(y)\) 为例
\(\begin{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}\)