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 資料範圍 ...