题意
在一个矩形盒子中,有 n 条线段,一个端点在矩形的上边,一个端点在矩形的下边,且互不相交。这 n 条线段把盒子分成 n + 1 个区域。给出 m 个玩具的坐标,问每个区域中有多少个玩具。
思路
整体上用二分法。枚举边,判断点在边的哪一侧,缩小范围,最终求出解。如果用每个区间的右界来界定区域,那么问题就转化成了 求某点右侧的边中最靠左的那一条,显然是二分的思路。
关键点就是如何判断点在边的哪一侧,这里用向量的叉积来判断。
叉积判断点在线段的哪一侧
从点出发,向线段的上端点作一向量 v1, 下端点作一向量 v2,计算 v1 v2 的叉积。
若 v1 ^ v2 < 0 ,在左侧;
若 v1 ^ v2 > 0 , 在右侧。
可以借助右手定则直观地判断。
题目链接
http://poj.org/problem?id=2318
AC代码
#include<iostream>