poj 2318 Toys(叉积判点在线段的哪一侧)

【题目大意】:给出一个矩形的左上角的点(x1,y1)以及右下角的点(x2,y2),并给出n条线段,线段表示为(l,y1),(r,y2),用于将矩形切割成n+1块,分别标记为0到n。再给出m个点,求举行的每一块分别包含几个点。

【解题思路】:已知给出三个点a,b,c,通过叉积可以判断c在线段a,b的哪一侧,若叉积小于0,则在线段左侧,等于0,三点共线,大于0,在线段右侧。所以对于每一个点只需要找到在其右边的最左边的线段即刻。

可以先对线段的左端点进行了排序,然后求叉积,求到一个叉积<0的线段就可以了。如果写二分会快一点。 

【代码】:

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

struct Line
{
    int l,r,cnt;
}line[10000];

int n,m,x1,yy1,x2,yy2,p,q;

bool cmp(const Line &a,const Line &b)
{
    return min(a.l,a.r)


【运行结果】:

 

 

你可能感兴趣的:(计算几何,search,im,c)