2023.1.12
SP20644.ZQUERY - Zero Query
如果 \([l,r]\) 区间和为 \(0\) ,那么可以转化为 \(s_{l-1}=s_r\) ,\(s\) 为前缀和数组,考虑添加操作非常的容易,但是删除操作不太容易,使用只加不减回滚莫队 。
P5906 【模板】回滚莫队&不删除莫队
回滚莫队模板题,对于每个数维护最前和最后的位置,只加不减回滚即可。
P4196 [CQOI2006]凸多边形 /【模板】半平面交
将每个多边形,按照逆时针的顺序,拆分成若干个向量,所有多边形的面积交也就是这些向量的的左半平面交。
我们对于所有向量进行极角排序,然后按照极角序用单调队列来维护,每次加入一个向量的时候,看一下前两个向量的交点是不是在新向量的右侧,如果是的话将其弹出。然后还要考虑队首的两个向量的交点是否在新向量的右侧,如果是的话将其弹出。
最后还要特殊判断一下队尾的两个向量交点是否在队首向量右侧,如果是的话就将队尾弹出。
判断点在向量的哪一侧
维护直线方向向量 \(v\) 还有上面的一点 \(P\) ,我们现在要判断点 \(Q\) 在直线的哪一侧,我们求 \(\overrightarrow{PQ} \times v\) ,如果这个叉积值为正,则 \(Q\) 在右侧,否则在左侧。
求两向量交点
对于平面内有四个点 \(A1,A2,B1,B2\) ,\(\vec{a}=A2-A1,\vec{b}=B2-B1,\vec{c}=B1-A1\) ,
那么两平行四边形面积比为 \(k=\frac{b \times c}{b \times a}\) ,
则交点 \(P=A1+k\vec{a}\) 。
SP4191.MSKYCODE - Sky Code
答案是 \({n \choose 4}\) 减去不合法的方案数,我们考虑每一个数作为公约数的次数,设 \(c_x\) 为 \(x\) 的倍数出现的次数,所以 \(x\) 的贡献为 \(\mu(x){x \choose 4}\) 。
SP287.NETADMIN - Smart Network Administrator
题目一眼二分答案,考虑如何进行检查,用网络流,每条边的容量设为 \(x\) ,即当前二分的值,看最大流是否流满即可。
P3964 [TJOI2013]松鼠聚会
切比雪夫距离转化成曼哈顿距离,然后枚举以每个松鼠作为家的答案即可。
注意这题横纵坐标互相独立,所以可以拆开来考虑,免去了树状数组。
曼哈顿距离转切比雪夫距离
切比雪夫距离转曼哈顿距离
- 曼哈顿坐标系本质上就是切比雪夫坐标系旋转 \(45^{\circ}\) 再缩小一半得到的。
P5098 [USACO04OPEN]Cave Cows 3
记录两种方法
直接维护
不妨设 \(x_1\geq x_2\),那么根据 \(y\) 分类讨论
-
\(y_1<y_2\) ,原式 \(=x_1-x_2+y_2-y_1=(x_1-y_1)-(x_2-y_2)\)
-
\(y_1\geq y_2\) ,原式 \(=x_1-x_2+y_1-y_2=(x_1+y_1)-(y_1+y_2)\)
因此直接维护出 \(x_i+y_i,x_i-y_i\) 的最大最小值即可。
曼哈顿距离转切比雪夫距离求解
将原坐标变成 \((x+y,x-y)\) ,问题转化成了求解任意两点之间最大的切比雪夫距离 ,那么直接维护一下 \(x,y\) 的最大最小值即可。