题目大意:
在平面上有一些点,每个点都有0,1其中一个属性。要求用一条直线将平面分成两部分。其中一部分取属性为0的点,另一部分取属性为1的点。若点在直线上全部取走,问最多能取多少个点。
解题思路:
扫描线算法。枚举任意一点,其他点依照那一点进行极角排序。扫描获得最大值。
注意:
1、因为 atan2方式的极角排序有精度误差,在这里需要用叉积方式排序。否则就自己慢慢测精度去吧!
2、用叉积方式的极角排序需要将排序的点提前处理到两个象限范围内。注意点属性的状态转换。
3、POJ数据较弱,HDU数据较强。两个OJ都是C++较慢。
下面是代码:
#include
#include