nyoj 952 : 最大四边形 (计算几何)

题目链接

任意四边形均可看作是两个三角形拼接得到的(即使是凹四边形),故 可以O(n^2)枚举所有的线段,然后对每条线段O(n)枚举线段端点外的其他点,用来更新以此线段构成的三角形的有向面积的最大值maxS和最小值minS,然后用maxS-minS更新ans就可以了。最后复杂度是O(n^3)

Point p[305];

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
            p[i].read();
        double ans=0;
        for(int i=0;i<n;i++)
            for(int j=i+1;j<n;j++)
            {
                double maxS=0,minS=0;
                for(int k=0;k<n;k++)
                {
                    maxS=max(maxS,Area2(p[i],p[j],p[k]));
                    minS=min(minS,Area2(p[i],p[j],p[k]));
                }
                if(dcmp(maxS)==0||dcmp(minS)==0) continue;
                ans=max(ans,maxS-minS);
            }
        printf("%.6lf\n",ans/2);
    }
}
时间: 2024-10-12 04:42:49

nyoj 952 : 最大四边形 (计算几何)的相关文章

CodeForces 23D Tetragon 给定凸四边形3条同边长的中点求4个顶点 计算几何

题目链接:点击打开链接 题意: 给定3个二维平面上的点 这3个点是一个凸四边形的其中3个中点 且所在的3条边边长相等 问是否存在这样的四边形,若存在则输出四边形顶点 思路: 那个外面的点是一个中点关于另一个中点对称得到的 然后得到一个圆的2条弦,圆心就是4个顶点之一,剩下对称出来即可 #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include

NYOJ 1165 just a problem【计算几何】

题目链接 #include<stdio.h> #include<math.h> struct point { double x; double y; }circle,a,b,c,d,temp; double r; double dis(point &a,point &b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } int main() { int s,t; scanf("%d&quo

hihocoder #1040 矩形判断(计算几何问题 给8个点的坐标,能否成为一个矩形 【模板思路】)

#1040 : 矩形判断 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. 输入 输入第一行是一个整数T(1<=T<=100),代表测试数据的数量. 每组数据包含4行,每行包含4个整数x1, y1, x2, y2 (0 <= x1, y1, x2, y2 <= 100000):其中(x1, y1), (x2,y2)代表一条线段的两个端点. 输出 每组数据输出一行YES或者NO,表示输入的

计算几何及其应用——计算几何基础

写在前面:当时开计算几何这个专题神奇的从解析几何开始了,然后最近发现<计算几何及应用(金博)>这本书前面那章忽略掉了一些重要的东西比如说点定位.半平面相交之类的东西,恰好还有一些和计算几何扯上边但是不需要算法的简单题目没有整理,故在此开辟一块小空间. 我们再来看一道有关几何的问题.(Problem source:hdu2073)    数理分析:虽然这道题异常的简单,基本算不上计算几何这个专题当中的题目,但是把它拿到这里来,是源于这道简单几何题的思路其实体现了计算几何整个体系中比较重要的思维.

【转】计算几何题目推荐

打算转下来好好做计算几何了. 原文地址:http://blog.sina.com.cn/s/blog_49c5866c0100f3om.html 其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠.3.要注意代码的组织,因为计算几何的题目很容易上两百行

三维计算几何模版

网上找了一个三维计算几何模版,完善了一下,使它能使用了... #include <cstdio> #include <cstring> #include <algorithm> using namespace std; /***********基础*************/ const double EPS=0.000001; typedef struct Point_3D { double x, y, z; Point_3D(double xx = 0, doubl

【计算几何】基础总结+题目推荐

刷了很久计算几何,好歹算是有些收获,总结一下吧. 计算几何不同与解析几何,这里大部分使用的是向量和点,而不是解析式. 直线/射线:一个点+一个方向向量. 线段:两个端点. 多边形:按逆时针排序的点集. 圆:圆心+半径. 点积:两个向量的数量积. 叉积:两个向量组成的四边形的有向面积. 基础部分有这些差不多了.比起解析式的运算过程来说,向量法的误差要小很多,而且基本不需要考虑特殊情况. 下面举个例子吧,分析解析几何和计算几何的差别. 最普通的,判断两直线是否相交或者重合,如果相交就计算交点. 解析

nyoj 石子归并(1)

石子合并(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述     有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价最小值. 输入 有多组测试数据,输入到文件结束. 每组测试数据第一行有一个整数n,表示有n堆石子. 接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开 输出 输出总代价的最小值,

NAV导航网格寻路 一些必要的计算几何知识

转载:http://blog.csdn.net/ynnmnm/article/details/44833007 NAV导航网格寻路 -- 一些必要的计算几何知识 在继续下面的nav网格生成算法之前,先介绍一下涉及到的计算几何知识.这里只罗列出结论,要详细了解参考相关书籍. 矢量加减法: 设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 ),则矢量加法定义为: P + Q = ( x1 + x2 , y1 + y2 ),同样的,矢量减法定义为: P - Q = ( x1 - x2