这个问题源于POJ 2500。由于看错了题目,我把题意理解成“给出一个圆,上面有数个点,任取4个点组成四边形,使得此四边形面积最大”。
标程给出的方法是O(N^2),是对于点之间距离固定的情况。
我也想出了一个O(N^2)的算法用于解决任意位置的点的情况。
将点按照顺时针排序
假设四边形的四个点A, B, C, D。按照顺时针方向排序。
按顺序枚举A
按顺序枚举C
B取最接近弧AC中心的点,D同理
在纸上画画就可以看出,如果C是递增的,则BD也是递增的。
因此C扫了一圈,BD加起来最多也扫两圈。
枚举A是O(N),枚举C是O(N),BD均摊下来也是O(N)
所以总复杂度是O(N^2)
虽然说复杂度跟标程一样,但还是TLE了,哥很久没写C代码了,现在比较挫。