1069 SCOI2007 最大土地面積

2021-07-11 19:52:12 字數 1277 閱讀 1484

time limit: 1 sec  

memory limit: 128 mb

submit: 2506  

solved: 955 [

submit][

status][

discuss]

在某塊平面土地上有n個點,你可以選擇其中的任意四個點,將這片土地圍起來,當然,你希望這四個點圍成

的多邊形面積最大。

第1行乙個正整數n,接下來n行,每行2個數x,y,表示該點的橫座標和縱座標。

最大的多邊形面積,答案精確到小數點後3位。

50 0

1 01 1

0 10.5 0.5

1.000

資料範圍 n<=2000, |x|,|y|<=100000

[submit][

status][

discuss]

對角線可以列舉,然後就是在兩邊各找乙個最大面積三角形,顯然三角形頂點具有單調性(同旋轉卡殼)故旋轉卡殼

寫的時候。。一開始cross函式左右傻傻分不清楚,然後,凸包裡面的點是不能有重複的

#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 2e3 + 20;

typedef double db;

const db eps = 1e-10;

struct p

p operator - (const p &b)

}p[maxn],q[maxn*2];

db cross(p v,p w)

db dot(p v,p w)

int n,cnt;

db ans;

bool cmp(db a)

int main()

int k = cnt;

for (int i = n - 1; i; i--)

for (int i = 0; i < cnt; i++) q[i] = q[i+1]; --cnt;

for (int x = 0; x < cnt; x++)

ans = max(ans,cross(q[a]-q[x],q[y]-q[x]) + cross(q[y]-q[x],q[b]-q[x]));}}

printf("%.3f",ans/2);

return 0;

}

1069 SCOI2007 最大土地面積

準備開始bzoj補完計畫了。話說終於可以切計算幾何了,好開森。雖然這題確實很簡單。第一眼就看出來 凸包 旋轉卡殼沒跑了。先求凸包。然後在旋轉卡殼的時候,每次求出一對對踵點,在連線的左側和右側各找乙個最遠點,四個點構成的可能是最大面積,求一下更新。具體證明什麼的?不會 include include ...

BZOJ1069 SCOI2007 最大土地面積

資料範圍2000,我們如果列舉對角線然後走呢,是不是n 3呢,仔細一想不是。因為面積是乙個單增的過程,所以建完凸包以後列舉對角線複雜度就是n 2的。因此這題我們就從乙個四邊形面積轉化為兩個三角形面積。by 大奕哥 1 include2 using namespace std 3 typedef do...

bzoj1069 SCOI2007 最大土地面積

在某塊平面土地上有n個點,你可以選擇其中的任意四個點,將這片土地圍起來,當然,你希望這四個點圍成的多邊形面積最大。第1行乙個正整數n,接下來n行,每行2個數x,y,表示該點的橫座標和縱座標。最大的多邊形面積,答案精確到小數點後3位。50 0 1 01 1 0 10.5 0.5 1.000 資料範圍 ...