題意:
乙個箱子,被n個板分為n+1塊,標號為0~n已知盒子左上角和右下角的座標及每個板上下兩端的橫座標(板不會交錯,且按順序給出)然後給出玩具的座標,統計每塊空間內玩具個數(保證玩具一定落在空間內)
5 6 0 10 60 0
3 14 3
6 810 10
15 30
1 52 1
2 85 5
40 10
7 94 10 0 10 100 0
20 20
40 40
60 60
80 80
5 10
15 10
25 10
35 10
45 10
55 10
65 10
75 10
85 10
95 10
0多個樣例,第一行n m x1 y1 x2 y2表示n條線段,m個玩具,左上角和右下角座標。
下面n行是n條線段的上端點和下端點的x座標。
在下面m行是m個玩具的座標。
p2p1(向量)×p2p0>0表示p0在p1p2的左面,<0表示在右面。
#include #include #include #include #include #include #include using namespace std;
const double eps = 1e-8;
const double pi = acos(-1.0);
int sgn(double x)
struct point
point(double _x,double _y)
point operator -(const point &b)const
double operator ^(const point &b)const
double operator *(const point &b)const
void transxy(double b)
};struct line
line(point _s,point _e)
pairoperator &(const line &b)const
double t = ((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));
res.x += (e.x-s.x)*t;
res.y += (e.y-s.y)*t;
return make_pair(2,res);
} };
int main()
int ans[5555] = ;
int x, y;
for(i = 0; i < m; i++)
else l = mid;
}v1 = line[l].s - line[l].e;
v2 = tmp - line[l].e;
point v3 = line[r].s - line[r].e;
point v4 = tmp - line[r].e;
if((v1 ^ v2) > 0)
else if((v3 ^ v4) > 0)
else
} for(i = 0; i <= n; i++)
puts("");
} return 0;
}
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 1塊,從0開始編號。保證按照順序給出並且沒有相交。給定m個點,詢問每乙個塊內有多少個點。題目分析 對於每乙個點二分所有的線段,然後利用叉積的性質判斷它在這條線的左邊還是右邊,統計答案。時間複雜度o mlogn 水題一枚 我這種蒟蒻也就能做這種題了...