最近開始學習計(keng)算(die)幾何,第一道入門題就是這道了。
本題最核心的問題,就是如何判斷乙個點在直線(線段)的什麼位置。這一點叉積可以很容易地做到。
設直線(線段)的向量為s->e, 詢問點為p, 那麼我們只需要計算一下 s->p x s->e, 如果大於0,說明s->p 順時針旋轉會達到s->e, 等於0說明就在直線上,小於0說明它需要逆時針旋轉才能達到s->e。
在這道題裡,如果我們始終選擇s是上面的點,e是下面的點的話,那麼s->p如果順時針旋轉能達到s->e,說明p在這條線段左邊,就滿足要求了。用叉積判斷的時候,大於0小於0跟你所選的向量起終點以及誰x誰都有關係,最後判出順時針逆時針也需要自己想想是在直線的哪邊……
最後是**,第一次寫,可能還比較醜陋……
#include#include#include#includeusing namespace std;
typedef long long ll;
struct ptype
;
ptype(ll _x, ll _y)
ptype operator + (ptype p)
ptype operator - (ptype p)
ll cross(ptype p)
}; struct segtype;
int n,m;
ll box_x0, box_y0, box_x1, box_y1;
segtype seg[5010];
int ans[5010];
void init()
int main()
for(i=1;i<=m;i++)
ans[high]++;
}for(i=1;i<=n+1;i++)
printf("\n");
}return 0;
}
叉積 二分 poj2318
1 通過結果的正負判斷兩向量之間的順逆時針關係 若 a x b 0表示a在b的順時針方向上 若 a x b 0表示a在b的逆時針方向上 若 a x b 0表示a在b共線,但不確定方向是否相同 2 判斷折線拐向,可轉化為判斷第三點在前兩的形成直線的順逆時針方向,然後判斷拐向。3 判斷乙個點在一條直線的...
POJ2318(叉積 二分)
題意 給了m個點,落在n 1個區域中,問各個區域有多少個點。思路 玩具的點和隔板的上下頂點連的邊求叉積,如果小於0,說明點在隔板左邊,用二分找每個隔板區間對應的玩具數。include include include include include include include include in...
ACM練級日誌 POJ 2155 1151
這些日誌僅供以後防止自己出現過去犯過的錯誤,起到乙個註記的作用。若其他的acmer覺得有用的話,本人也感到欣慰 最近一直在練線段樹,說說線段樹的 染色問題 和 計數問題 比如poj的2155,level 2的一道題,入門二維線段樹,這道題一開始被我當成了染色問題。本來想用每個node去記錄這一段是0...