假設玩具\(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分別表示邊數,點數,矩形...