Description
在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大。
Input
第1行一个正整数N,接下来N行,每行2个数x,y,表示该点的横坐标和纵坐标。
Output
最大的多边形面积,答案精确到小数点后3位。
Sample Input
5
0 0
1 0
1 1
0 1
0.5 0.5
Sample Output
1.000
此题考察Graham算法和旋转卡壳算法。
首先用Graham求出凸包,然后枚举点A,用旋转卡壳法求出它的对踵点B,再用旋转卡壳法求出关于AB两点的对踵点CD,取所有的以AB和CD为对角线的四边形中面积最大的一个,即为所求的结果。
时间复杂度O(n)。
Accode:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>
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 <double> vec;
vec p[maxN];
vec res[maxN];
int n, top = 1;
void init_file()
{
freopen(fi, "r", stdin);
freopen(fo, "w",

该博客介绍了如何运用Graham算法和旋转卡壳算法解决计算几何中的一个问题,即找出一组点中形成的最大土地面积。首先通过Graham算法获取凸包,然后枚举点并找到其对踵点,再用旋转卡壳法确定对踵点对,最后计算以这些点为对角线的四边形中面积最大的一个。
602

被折叠的 条评论
为什么被折叠?



