题目大意:
箱子有一堆木板隔离开不同区域给定木板的起末点位置,和一堆物品入箱的坐标,最后来求每块区域的物品个数
这里我们可以很容易得知,一个物品的点所在的区域,和前后两个木板形成的叉积值正负性是正好相反的,所以函数如下:
bool inArea(Point a , Line L1 , Line L2){
double t1 = Cross(a-L1.A , L1.B - L1.A) , t2 = Cross(a-L2.A , L2.B - L2.A); //cout<<"Cross: "<<t1<<" "<<t2<<endl; return dcmp(t1)*dcmp(t2) < 0;}
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 #define eps 1e-10 7 #define N 5005 8 struct Point{ 9 double x,y;10 Point(double x=0,double y=0):x(x),y(y){}11 };12 13 struct Line{14 Point A , B;15 }line[N];16 typedef Point Vector;17 18 int dcmp(double x){19 if(abs(x)