题意:给了一个凸包,按顺时针顺序给点,点数不超过10万,再给了两个不同点,点严格在凸包内,凸包保证没有三点共线,问凸包上有多少对点(pi, pj),满足pi和pj的线段 与 两个点的线段严格相交,线段间严格相交意思是交点不在端点。
链接:http://codeforces.com/gym/100517 (K题)
解法:设凸包有n个点,将凸包点集p扩大一倍,变为2n个点。枚举前n个点,每次枚举到 i ,在[i+1, i+n-1]内进行二分,找到两个点p1,p2,满足p1和p2是”最靠近” 那两点线段 的点。统计下中间个数即可。二分过程中需要进行一种同方向判断,即判断该直线是否在某一个线段”左边”或”右边”,用叉积判断即可。
代码
//Hello. I'm Peter.
//#pragma comment(linker, /STACK:102400000,102400000)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include