最大四边形
时间限制:
1000 ms | 内存限制:
65535 KB
-
描述
-
平面坐标上有n个点,你知道能组成四边形中面积最大的是多少吗?
-
输入
-
有多组测试数据
第一行整数n,表示有n个点,( 4<=n<=300 )
然后n行,每行x,y表示点的坐标。(没有重复的点)
输出
- 最大四边形的面积.(保留六位小数) 样例输入
-
5 0 0 0 4 4 0 4 4 2 3
样例输出
-
16.000000
-
#include <cstdio> #include<iostream> #include <algorithm> #define eps 1e-10 using namespace std; struct point{ double x,y; }p[305]; double cross(point p0,point p1,point p2){//叉积求面积 double x1,x2,y1,y2; x1=p1.x-p0.x; x2=p2.x-p0.x; y1=p1.y-p0.y; y2=p2.y-p0.y; return 0.5*(x1*y2-x2*y1); } int main(){ int n; while(cin>>n){ for(int i=0;i<n;i++) cin>>p[i].x>>p[i].y; double ans=0.0,max1=0.0,max2=0.0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ max1=0.0,max2=0.0; for(int k=0;k<n;k++){ if(k!=i&&k!=j){ double area=cross(p[i],p[j],p[k]); if(area<0) max1=max(max1,-area); else max2=max(max2,area); } } if(max1==0||max2==0) continue; ans=max(ans,(max1+max2)); } } printf("%lf\n",ans); } return 0; }
-
有多组测试数据