叉積 二分 poj2318

2021-07-29 18:35:03 字數 1054 閱讀 4766

1:通過結果的正負判斷兩向量之間的順逆時針關係

若 a x b > 0表示a在b的順時針方向上

若 a x b < 0表示a在b的逆時針方向上

若 a x b == 0表示a在b共線,但不確定方向是否相同

2:判斷折線拐向,可轉化為判斷第三點在前兩的形成直線的順逆時針方向,然後判斷拐向。

3:判斷乙個點在一條直線的那一側,同樣上面的方法。

5:判斷兩條直線是否想交(跨立實驗)

因為這個叉積大小的問題染了半天,這裡的**是以底下b點為原地的,所以說與結論恰好相反。(一直把自己繞進去了,浪費了一天的時間啊)

#include #include#include#includeusing namespace std;

struct point

point[5010];

struct line

line[5010];

int ans[5010];

int mult(point p1,point p2,point p0)

void bs(point t,int n)

if(mult(t,line[begin].a,line[begin].b)>0) ans[begin+1]++;

else ans[begin]++;

}int main()

{ int n,m;

while(scanf("%d",&n)!=eof)

{if(n==0) break;

scanf("%d",&m);

memset(ans,0,sizeof(ans));

int xx1,xx2,yy1,yy2;

scanf("%d%d%d%d",&xx1,&yy1,&xx2,&yy2);

for(int i=0;i

POJ2318(叉積 二分)

題意 給了m個點,落在n 1個區域中,問各個區域有多少個點。思路 玩具的點和隔板的上下頂點連的邊求叉積,如果小於0,說明點在隔板左邊,用二分找每個隔板區間對應的玩具數。include include include include include include include include in...

poj 2318 二分 叉積

n個隔板和m個玩具位置均已知,n個隔板將矩形盒子分為n 1個區域。已知隔板可看作上端點在矩形的上邊,下端點在矩形的下邊的一條線段。且隔板是按照從左到右的順序輸入的。問每個區域內有幾個玩具。1.二分 假如第i個玩具在第x個隔板的左側,那麼一定在第y y x 個隔板的左側,符合單調性,可以二分。poj ...

POJ 2318 TOYS(叉積 二分)

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