2維平面上有n個木樁,黃學長有一次圈地的機會並得到圈到的土地,為了體現他的高風亮節,他要使他圈到的土地面積盡量小。圈地需要圈乙個至少3個點的多邊形,多邊形的頂點就是乙個木樁,圈得的土地就是這個多邊形內部的土地。(因為黃學長非常的神,所以他允許圈出的第n點共線,那樣面積算0)
對於100%的資料,n<=1000。
思考乙個n
2n^2
n2演算法,不難想到對於n
2n^2
n2條線段(兩點),最優的第三點離該線段最近。相當於把線段看成y
yy軸旋轉。
如何o(1)找到最近點? 在前後兩條線段的 決策點的x′x'
x′遞增序列 中,有大部分的相對位置未變。換而言之,對於任意兩點,設為i
ii,j
jj,假設x
i x_xi ,只有線段ijij ij轉過了y yy軸後,才有x i>xj x_>x_ xi>xj .將所有線段按照 斜率(或極角)排序,對於當前線段上的兩點,轉移到下一線段時,只有這兩點的相對位置改變,交換即可。#include
#define pf printf
#define sf scanf
#define cs const
#define ll long long
#define db double
#define int long long
using
namespace std;
cs int n=
1e3+10;
cs db eps=
1e-7
,inf=
1e18
;struct vector
friend vector operator
+(cs vector &a,cs vector &b)
friend vector operator
-(cs vector &a,cs vector &b)
friend
intoperator
^(cs vector &a,cs vector &b)
bool
operator
<
(cs vector &t)cs
}p[n]
;struct line
}l[n*n]
;int n,rk[n]
,sam[n]
,cnt=0;
inline db area
(cs vector &a,cs vector &b,cs vector &c)
signed main ();
}sort
(l+1
,l+cnt+1)
; db ans=inf;
for(
int i=
1;i<=cnt;
++i)pf(
"%.2lf"
,ans)
;return0;
}
BZOJ3707 圈地 (幾何,旋轉座標系)
description 2維平面上有n個木樁,黃學長有一次圈地的機會並得到圈到的土地,為了體現他的高風亮節,他要使他圈到的土地面積盡量小。圈地需要圈乙個至少3個點的多邊形,多邊形的頂點就是乙個木樁,圈得的土地就是這個多邊形內部的土地。因為黃學長非常的神,所以他允許圈出的第n點共線,那樣面積算0 in...
BZOJ 3707 圈地 (動態凸包)
傳送門 題意 給n 個點,求最小三角形。n 1000 題解 好題啊。後面有動態凸包 有一種簡單的做法 首先如果選定了底邊的兩點,那麼還需要選擇一條離這條底邊最近的點。將當前座標系y軸旋轉這條底邊,那麼選擇 x 最小的點。考慮按照斜率從小到大列舉底邊。對於兩個點a,b 來說,若一條底邊c,d 的斜率小...
bzoj 3232 圈地遊戲
題意 在乙個n m的網格裡,邊上有花費,格里有權值 從任意乙個點開始繞一圈,繞乙個簡單環出來,裡面的所有格仔就是收益 求最大的收益 花費 所有數 100 題解 考慮01分數規劃的方式,但是花費和權值不在一起 那麼考慮將格內的權值轉化到邊上 實際上將邊有向化,按邊方向左面一行的權值為正,右面為負,加起...