牛客多校第二场

补题进度:5/9(11)

写两个签到,就趴在地上起不来了,睡了一觉起来,不想做i,拿着j不知所措,想了一下专题的问题,就结束了,好像被多校打的有点失去自我了啊


A.run

$dp_{i,0/1}$:分别表示是walk or run过来的方案数即可


B. discount

待补


C.Fluorescent 2

题意

有一个无线大的平面,平面上有n条斜率不为零的直线。
有m次询问,每次询问从y轴上的一个点出发往x轴正方向沿一条直线走,最后一个与这n条直线相交的点的
横坐标。
n,m<=50000

题解

待补


D.Two Graphs

贪心即可


E. tree

留坑


F. trade

留坑


G.transform

题意

数轴上有n个集装箱,第i个集装箱位于坐标x[i],有a[i]件货物。
现在要把集装箱进行一些移动,从位置u到位置v的花费为$2*abs(x[u]-x[v])$, 求在所有货物移动总距离不超过T的情况下,最多能把多少个集装箱移动到同一个位置。

题解

因为答案是单调的,可以二分答案。
由于最后的答案一定是一段区间数字移动到一起,可以直接枚举左端点,右端点是单调的。

那么问题转化为给一个区间,移动的花费是曼哈顿距离,怎么check得到这个区间的点移动到一起花费最小值?

这是一个经典问题,答案是所有位置的点的中位数。

如1,2,2,5,所有点移到x=2最优

Trick:因为枚举的区间可能不是恰好mid个,左端点或者右端点肯定有一部分点取不到,枚举左端点是,mid左边可能不止左端点不取,但右端点一定是可以的,因为r-1的和< mid 但r的和>=mid 故要分别从左和从右端枚举。


H. Longest Path

题意

给一棵点权树,选出三条不相交的链使得三条链的权值之和最大

题解

tokitsukaze题解


I. Different Integers

找规律


J.farm

题意

给一个 $nm$ 的矩阵,每个点有一个值,现有T次处理,每次用 $k$ 处理矩阵的一个矩形区域,若k不等于每个点原来的值就失效,问T次处理后失效的格子数量 $(a_{ij},T,nm<10^6)$

题解

假如格子中的值和修改只有01,直接二维前缀和分别为何每个格子0和1的次数即可。

Trick:

  1. 可以把所有点离散化成一维
    $$(x-1)*m + y-1$$

  2. 当然二维动态开vector也是可以的

解法一:
考虑每一个二进制位,对T个询问的k进行二进制01拆分,就变成了上面的问题
实测动态开vector TLE了

解法二:
二维偏序

对于每一种格子,我们若是统计出每个格子用相同的格子修改的次数,和每个格子总的修改次数进行比较便可以判断是否bad

那么如何统计出每个格子用相同的格子修改的次数?

不难看出,这是 $well-knowed$的二维偏序问题,对一维排序(x),另一维用BIT维护即可,这样可以保证修改是正确的。但对于同一个点要先修改在查询即可,因为维护的时候有+有-,故不用每次清空BIT

解法三:
随机


K.carpet

题意

有一个$n*m$ 的矩阵A,每个位置有一个字符和一个权值,现在要找一个子矩阵,使得这个子矩阵是A的一个
循环节,并最小化子矩阵的权值最大值。

题解

待补or留坑