nyoj952——最大四边形
来源:互联网 发布:手机壁纸网站 知乎 编辑:程序博客网 时间:2024/06/06 09:57
描述
平面坐标上有n个点,你知道能组成四边形中面积最大的是多少吗?
输入
有多组测试数据
第一行整数n,表示有n个点,( 4<=n<=300 )
然后n行,每行x,y表示点的坐标。(没有重复的点)
输出
最大四边形的面积.(保留六位小数)
样例输入
5
0 0
0 4
4 0
4 4
2 3
样例输出
16.000000
平面坐标上有n个点,你知道能组成四边形中面积最大的是多少吗?
输入
有多组测试数据
第一行整数n,表示有n个点,( 4<=n<=300 )
然后n行,每行x,y表示点的坐标。(没有重复的点)
输出
最大四边形的面积.(保留六位小数)
样例输入
5
0 0
0 4
4 0
4 4
2 3
样例输出
16.000000
思路:枚举两个点作为一条边,然后枚举其他点,找到这条边两边最大的三角形就可以了。
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>using namespace std;const int maxn=305;const double eps=1e-8;struct Point{ double x,y;}p[maxn];double muti_cross(Point a,Point b,Point c)//叉乘求面积{ double x1=a.x-b.x; double x2=a.x-c.x; double y1=a.y-b.y; double y2=a.y-c.y; return (x1*y2-x2*y1)*0.5;}int main(){ int n; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); double area=0,lmax,rmax; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){//i,j两点作为一条边 lmax=0; rmax=0; for(int k=0;k<n;k++){//枚举其他点 if(i!=k&&j!=k) { double s=muti_cross(p[k],p[i],p[j]); lmax=max(lmax,-s);//点可能在边的左侧或者右侧 rmax=max(rmax,s); } } if(lmax<=eps||rmax<=eps)//排除三角形的情况 continue; area=max(area,lmax+rmax); } } printf("%0.6f\n",area); } return 0;}
阅读全文
0 0
- nyoj952——最大四边形
- nyoj952最大四边形
- nyoj952最大四边形 思路+代码
- nyoj952 最大四边形(叉乘+技巧)
- NYOJ952--最大四边形--叉积分成三角形
- 最大四边形
- NYOJ 952 最大四边形
- nyist 最大四边形
- nyoj 952 最大四边形
- 柱形图中求最大四边形面积
- 旋转卡壳——四边形剖分
- 旋转卡壳——四边形剖分
- 任意凸四边形内最大矩形
- N个点求最大的四边形面积
- hdu4386(求四边形最大面积)
- 计算几何 求n个点中最大四边形
- NYOJ 952 最大四边形 (n个点求组成四边形的最大面积)
- DP优化——四边形不等式(简介)
- ASN.1规则中Boolean和bitstring编码方式的简介
- wireshark抓包分析
- “玲珑杯”ACM比赛 Round #20 E -- 造物主的戒律(主席树)
- 谈谈数字签名
- Pi数字生成协议(Pi Digit Generation Protocol,PIgen)RFC3091
- nyoj952——最大四边形
- linux 文件/目录权限、用户、组相关操作
- 多校第十场 hdu 6180 Schedule (multiset)/(思维)
- 树链剖分模板
- 2017年8月华为杭研所优招面试经验
- linux常用指令
- java鬼混笔记:页面验证码生成
- LintCode 372: Delete Node in the Middle of Singly Linked List
- transceiver 接收和发送重配调试