CF1146G - Satanic Panic

CF1146G - Satanic Panic

题目大意

给定平面上\(n\)个点,求能够构成五角星的五元组数目


分析

实际上就是求五元凸包数目,下面直接考虑\(k\)元的形式

考虑凸包的两种判定方法:

1.所有转角\(<\pi\)

然而这并不好实现

2.一个凸包可以根据\(x_i\)最大、最小的两个点分成上下两部分,上下分别判断转角\(<\pi\)

(可以通过随机旋转规避\(x_i\)相同的情况)

(这题\(k\)较小,或许可以上下暴力枚举?)

一般的情况,枚举\(x_i\)最小的点\(A\)

然后令\(dp_{i,j}\)表示当前凸包最后一条折线为\((i,j)\),然后不断接新点

最后合并上下两个凸包

直接实现,单次\(dp\)状态\(O(n^2k)\),转移\(O(n)\),复杂度为\(O(n^4k)\)

优化:

\((i,j)\rightarrow (j,k)\),可以先确定\(j\)

然后按照转角顺序枚举\(k\),双指针完成所有\(k\)的转移

如果预处理每个点出发的转角序,则预处理\(O(n^2\log n)\),总复杂度为\(O(n^3k)\)

(Code消失了)

posted @ 2021-05-23 10:56  chasedeath  阅读(57)  评论(1编辑  收藏  举报