此題考察graham演算法和旋轉卡殼演算法。description
在某塊平面土地上有n個點,你可以選擇其中的任意四個點,將這片土地圍起來,當然,你希望這四個點圍成的多邊形面積最大。
input
第1行乙個正整數n,接下來n行,每行2個數x,y,表示該點的橫座標和縱座標。
output
最大的多邊形面積,答案精確到小數點後3位。
sample input
50 0
1 01 1
0 10.5 0.5
sample output
1.000
首先用graham求出凸包,然後列舉點a,用旋轉卡殼法求出它的對踵點b,再用旋轉卡殼法求出關於ab兩點的對踵點cd,取所有的以ab和cd為對角線的四邊形中面積最大的乙個,即為所求的結果。
時間複雜度o(n)。
accode:
#include #include #include #include using std::complex;
const char fi = "area.in";
const char fo = "area.out";
const int maxn = 2010;
const int max = 0x3f3f3f3f;
const int min = ~max;
const double zero = 1e-12;
typedef complex vec;
vec p[maxn];
vec res[maxn];
int n, top = 1;
void init_file()
void readdata()
return;
}int cmp(const void *a, const void *b)
template _tp outer_product(const complex <_tp> &a,
const complex <_tp> &b)
void graham()
int tmp = top;
res[++top] = p[n - 2];
for (int i = n - 3; i > -1; --i)
return;
}void work()
printf("%.3lf\n", ans / 2.);
return;
}int main()
洛谷4166 最大土地面積(計算幾何)
首先講一波錯誤的想法 來自wcr dalao 為什麼要去找最遠點對呢?反例太好找了啊!好的講講正解,首先要找最大面積,肯定要在凸包上去找四個點 證明等我思考出來就更傳送門 然後我們發現 哎呀這個點數怎麼才2k啊,哇直接列舉所有對角線不就行了嗎?然後我們再感性理解一下 在對角線兩邊,三角形的面積呈單峰...
計算幾何 凸包 SCOI2007最大土地面積
在某塊平面土地上有n個點,你可以選擇其中的任意四個點,將這片土地圍起來,當然,你希望這四個點圍成 的多邊形面積最大。n 2000 比較基礎的計算幾何 複習題 誤 首先,很容易證明一點 所選擇的點一定位於凸包上。因為如果存在最大四邊形使得點不全在凸包上,可以將不在凸包上的點外延,得到更大的凸包 如下圖...
BZOJ 1069 最大土地面積
給出平面上的一些點,找出四個點使這四個點圍成的面積最大。首先這四個點肯定在凸包上 顯然。所以求出凸包後 n 地列舉乙個點,之後利用旋轉卡殼求出與這個點相距最遠的點,然後列舉所有點找出兩邊三角形的最大面積取最大即可。這題主要是板子吧,背會就好背會就好 include include include i...