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消失了)