poj 2318 TOYS 點與矩形的關係

2022-05-11 16:55:22 字數 765 閱讀 3471

假設玩具\(p\)在第\(i\)個區域,其左邊為第\(i\)條線段\(a_1b_1\),右邊為第\(i+1\)條線段\(a_2b_2\)(\(a\)在上邊,\(b\)在下邊),則有$$\overrightarrow\times\overrightarrow\gt 0 且 \overrightarrow\times\overrightarrow\lt 0$$

並且左邊的叉積都大於\(0\),右邊都小於\(0\).

因此可以二分查詢\(p\)的位置。

也可以先對玩具的橫座標用\(lower\_bound\)確定下來乙個小範圍,再在這個小範圍內二分(直接查詢也可以,因為這個範圍應該很小)。

#include #include #include #define maxn 5010

int up[maxn], down[maxn], ans[maxn], n, m;

using namespace std;

typedef long long ll;

ll vec(ll x1, ll y1, ll x2, ll y2, ll x0, ll y0)

void work()

if (p1 > p2) swap(p1, p2);

for (int i = p1; i <= p2; ++i) }}

for (int i = 0; i <= n; ++i) printf("%d: %d\n", i, ans[i]);

printf("\n");

}int main()

poj2318 TOYS 線劃分矩形

題目意思 在乙個矩形中用n條線來劃分 劃分的線不交叉此而且只能分左右方向 給出m個點,求乙個區域內分別有多少點。解題思路 判斷點在直線的左邊還是右邊 如下 include include include define eps 1e 8 struct point struct line int sig...

POJ 2318 TOYS 點與線段關係

乙個玩具箱被n個擋板分成n 1快,擋板不會互相交叉。將m個玩具扔進去,求分別被扔進了哪個區域。主要演算法就是判斷點與線段的關係,排序後從左往右依此判別即可。memory 480k time 485ms include include include using namespace std struc...

POJ 2318 TOYS(計算幾何)

description 乙個矩形區域中有n條互不相交的線段,每條線段的上下端點分別在矩形的上下邊上,現給出該矩形區域中m個點的座標,保證點不在邊上,統計由這n條邊將矩形分成的n 1個區域中各有多少個點 input 多組用例,每組用例第一行六個整數n,m,xl,yl,xr,yr分別表示邊數,點數,矩形...