ABC250F

ABC250F

*2044

题意

给你一个凸包,你需要沿着对角线将其 击而破之 切成两部分,然后选择其中的一部分。设原凸包的面积是 \(A\),你选择的部分是 \(B\) ,你需要最小化 \(8 × |A \div4-B|\)。可以证明答案是一个整数。

凸包以顶点的形式给出,顶点按逆时针方向排列。

\(N \le 10^5\)

题解

直接运用旋转卡壳的思想,使用双指针。

枚举每一个起刀点 \(p\),然后逆时针枚举落刀点 \(q\) ,始终选取所切出的线段的左半平面。容易发现这样所得到的面积 \(B\) 是随着 \(q\) 的移动单调递增的。而当其超过了 \(A ÷ 4\) 时显然接着枚举不会更新答案了,所以就可以只计算第一个大于 \(A÷4\)\(q\)(注意这里没必要移动 \(q\) 了),然后跳过剩下的点。

那么当我们接着逆时针枚举 \(p+1\) 的时候,我们就没必要重置之前的 \(q\) 了。因为在固定 \(q\) 的情况下,\(p ← p+1\) 只会使得面积变小,不会超过 \(A ÷ 4\),省去了前面的点,从而避免了重复枚举。然后接着向后枚举 \(q\) 即可。

时间复杂度 \(O(n)\)

posted @ 2022-11-15 16:55  Rnfmabj  阅读(16)  评论(0编辑  收藏  举报