POJ 2318 TOYS(二分 叉積)

2022-05-04 09:15:10 字數 1308 閱讀 5079

傳送門

設點a 假如a在乙個板子1的左邊 那他肯定也在乙個板子2左邊 而且板子還是按順序排的

滿足單調性 可以二分

考慮check 判斷點a在直線l左邊 只需判斷a到直線l的端點1 端點2兩個向量的叉積小不小於0  

#include#include

#include

#include

#include

#define eps 1e-6

#define n 5005

using

namespace

std;

struct

point

;}p[n];

typedef point vector;

vector

operator +(vector a,vector b)

vector

operator -(vector a,vector b)

vector

operator *(vector a,double

p)vector

operator /(vector a,double

p)bool

operator

<(const vector &a,const vector &b)

double dot(vector a,vector b)//

點積 double

len(vector a)

double angle(vector a,vector b)//

夾角 double

cross(vector a,vector b)

int dcmp(double

x)struct

line

; line(point p1,point p2):p1(p1),p2(p2){}

}l[n];

intn,m;

point upper_left,lower_right;

inline

bool

pointisleft(point p,line k)

inline

intbinarysearch(point p)

return

le;}

intans[n];

intmain()

memset(ans,

0,sizeof

(ans));

for(int i=0;i)

for(int i=0;i1;i++)

cout

<<'\n'

; }

}

POJ 2318 TOYS(叉積 二分)

click here 題意 有乙個矩形的盒子,中間插了n個擋板,將盒子分成n 1個區域,然後給m個點,問最後每個區域落下多少個點。點不會落到擋板上 解題思路 把矩形的右邊看成第n 1個擋板。稍加分析,得到這個特點 若點 k 在擋板 i 的左邊,那麼 k 也一定在擋板 j 的左邊 i j n 1 則對...

POJ 2318 TOYS 叉積 二分

題意 一些斜線將矩形劃分成若干個格仔,給出一些點,問每個格仔裡有多少點。對於乙個點和乙個線段,可以通過分別連線這個點與線段的兩個端點得到兩個向量 均是以那個點為起點指向兩個端點 然後作叉積得到該點位於線段在左側還是右側,叉積大於零為右側,小於零為左側。然後該題就可以利用此性質,發現點對於每個分隔線的...

poj2318 TOYS 叉積性質 二分

乙個矩形,n n 5e3 個玩具,m m 5e3 個擋板,問每個玩具在哪個區域,1號擋板左側為0號區域,右側為1號區域,以此類推 記向量p 隔板的上端點 玩具 向量q 隔板的上端點 隔板的下端點 那麼如果q旋轉到p為逆時針,即q p 0,說明玩具在隔板右側 二分找到最右的隔板,滿足玩具在隔板右側即可...