Pan's Labyrinth (找组成的三角形最大的高)

Pan‘s Labyrinth


Time Limit: 2 Seconds     
Memory Limit: 65536 KB      Special Judge



Ofelia is chased by her evil stepfather, and now she finds herself lost in a labyrinth. She needs your help to run away from her tragic family.

There‘s a huge metal door standing in front of the exit of the labyrinth. There are
n dots on the metal door. Pan (the god of the labyrinth) asks Ofelia to find out a triangle which has the largest height. The triangle‘s three vertexes must be the dots on the door, and its area must be positive. Ofelia should tell Pan the triangle‘s
height so Pan will let Ofelia go.

Input

There are multiple cases (About 100 cases). For each case, the first line contains an integer
n (3<=n<=500). In the next n lines, each line contains two real number
x[i], y[i] (0<=x[i], y[i]<=10000) which indicates each dot‘s coordinate. There is no two dots in the same coordinate. The answers are strictly greater than 0.

Output

For each test case, output one line with the maximum triangle height. Any solution with a relative or absolute error of at most 1e-6 will be accepted.

Sample Input

6
0.000 4.000
2.000 4.000
1.000 0.000
1.000 8.000
0.900 7.000
1.100 7.000
7
6967.54555 3457.71200
3.52325 1273.85912
7755.35733 9812.97643
753.00303 2124.70937
7896.71246 8877.78054
5832.77264 5213.70478
4629.38110 8159.01498

Sample Output

7.00000
8940.96643

Hint

In case 1. Choose the dot 3, 5, 6 to make up a triangle, and this triangle has the largest height 7.000.In case 2. We choose dot 2, 3, 5.

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
# include<cmath>
using namespace std;
const int maxn=500+5;
struct point
{
    double x,y;
    point(double x=0,double y=0):x(x),y(y) {}
};

typedef point Vector;

 double cross(Vector A, Vector B)
{
    return A.x*B.y-A.y*B.x;
}

double Dot(Vector A, Vector B)
{
    return A.x*B.x+A.y*B.y;
}
double Length(Vector A)
{
    return sqrt(Dot(A,A));
}
double distanc(point A, point B)
{
    return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}

Vector operator -(Vector A,Vector B)
{
       return  Vector(A.x-B.x,A.y-B.y);      //被重载坑了一上午。
}

 double DistanceToLine(point p,point A,point B)
{

    Vector u=B-A,v=p-A;
    return fabs(cross(u,v))/Length(u);
}

/*double dist(point a,point b,point c)
{
    if(b.x!=a.x)
    {
        double k=(b.y-a.y)/(b.x-a.x);
        return fabs((c.y-a.y)-k*(c.x-a.x))/sqrt(1+k*k);
    }
    else
        return fabs(c.x-a.x);
}*/
point num[maxn];
int i,j,k;
int main()
{
    /*#ifndef  ONLINE_JUDGE
    freopen("in.txt","r",stdin);
     #endif*/
    int n;
    while(cin>>n)
    {
        int k;
        double high;
        high=0.0;
      for(i=0;i<n;i++)
        scanf("%lf%lf",&num[i].x,&num[i].y);

      for(i=0;i<n;i++)
       {
            double mmax=0.0;
            for(j=0;j<n;j++)
            {
                if(j==i)  continue;
                if(distanc(num[i],num[j])>mmax)
                {
                       k=j;
                      mmax=distanc(num[i],num[j]);
                }
            }

            for(j=0;j<n;j++)
            {
              if(i==j||j==k)  continue;
              high=max(high,DistanceToLine(num[i],num[j],num[k]));
              high=max(high,DistanceToLine(num[j],num[k],num[i]));
              high=max(high,DistanceToLine(num[k],num[j],num[i]));
             }
       }
       printf("%0.6f\n",high);
    }
    return 0;
}

Pan's Labyrinth (找组成的三角形最大的高)

时间: 2024-10-30 22:27:09

Pan's Labyrinth (找组成的三角形最大的高)的相关文章

ZOJ 3762 Pan&#39;s Labyrinth 计算几何

题意:给出一系列的坐标,要求出这些坐标中组成的三角形中最大的高是多少 下列两个假设必然有一个成立 1.点C是所有点中距离点A最远的 2.点C是所有点中距离点B最远的 #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<iostream> using namespace std; struct point { double x,y; }p[5

找出linux服务器IO占用高的程序

一台服务器比较性能无外乎内存.cpu使用率.IO使用率,把这3样优化好了,你服务器的负载就要小很多,当然网络情况不在我的考虑范围,毕竟网络这个情况是很不稳定,就算你服务器上把网络优化得再好,idc不给力也没用,除非是自己公司机房,好了,今天只说下怎么找IO占用高的程序. 系统:centos 5.5 1.开启IO监控 sysctl vm.block_dump=1或echo 1 >/proc/sys/vm/block_dump 2.开启后内核会将IO读写dump到日记,用dmesg查看: dmesg

BZOJ 1845: [Cqoi2005] 三角形面积并 [计算几何 扫描线]

1845: [Cqoi2005] 三角形面积并 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 1151  Solved: 313[Submit][Status][Discuss] Description 给出n个三角形,求它们并的面积. Input 第一行为n(N < = 100), 即三角形的个数 以下n行,每行6个整数x1, y1, x2, y2, x3, y3,代表三角形的顶点坐标.坐标均为不超过10 ^ 6的实数,输入数据保留1位小数 Out

二维图像的三角形变换算法解释

http://blog.csdn.net/aqua_aqua/article/details/407660 对于二维图像的变形,最简单直接的方式就是将需要变形的不规则区域进行三角形划分,使复杂多边形由1到N个三角形组成,那么最终的变形动作也就转化为这些三角形变形. 三角形变形,就是将一个三角形通过某种变换变成另一个三角形,同时也要保证在源三角形中的点能够正确映射到目标三角形中合适的位置.如下图所示: 图中△ABC是源三角形,Z点是源三角形中的任意一点.△abc为目标三角形,而z点就是源三角形中Z

bzoj3251: 树上三角形(思维题)

神tmWA了8发调了20min才发现输出没回车T T... 首先考虑一段什么样的序列才会是N... 显然最长的形式就是斐波那契,前两数之和等于第三数之和,这样就无法组成三角形并且序列最长.可以发现在int范围内斐波那契数列不会超过50个,所以如果这段路径上节点数超过50个直接输出Y,否则把50个数拉出来排序暴力找是否有三角形就好了. #include<iostream> #include<cstring> #include<cstdlib> #include<cs

干货:软件开发行业的产品经理该怎么为团队找项目

(更多精彩分享请关注我哦~) 作为一个软件行业的产品经理,一般而言我都是通过以下几种方法来寻找客户的,有的见效快有的见效慢,但最起码这几中方法都是有用的. 首先就是第一种:圈养客户 圈养客户顾名思义就是划块地方把潜在的客户都聚集到一起,我喜欢吧客户圈养到微信群里,不打广告,但是时常会聊聊行业相关,起码要让他们知道我是做软件开发的,也会聊聊我的团队擅长哪个领域,要注意的是不能太频繁,会显得你很闲,给他们留下一个印象就好了. 一般这样的客户我会从QQ群微信群寻找,加许多质量比较好的群,然后再将那些质

厦门app找云颠科技

许多朋友都在纠结app开发到底找哪家性价比才会比较高,其实厦门app开发市场已经给出了答案,厦门云颠科技有限公司致力于开发手机应用程序.微信公众平台搭建和企业网站建设,并已积极拓展手机游戏业务,现推出了<上将军>手机网络游戏,<痛快猜>系列单机游戏,技术实力扎实,服务态度好,价格是同行中最低. 厦门云颠科技:http://www.yundiankj.com/云颠科技 联系电话:15159209697 客服Q  Q:2560967672 欢迎咨询! 厦门app找云颠科技,布布扣,bu

手机短信内容,通话记录,手机定位找人

免责声明:咨 询 Q Q: 2540400410 主要有这方面的一切问题你就直接加这个QQ:2540400410就帮助你了.成功案例等信息在此强烈推荐,他们专业查微信聊天记录,QQ聊天记录,恢复删除的微信聊天记录,查别人的qq聊天记录等.服务QQ: 2540400410.我找过他们,他们有信誉.也许可以帮你,我查我男朋友的聊天记录就是找他们的.~他们的QQ: 2540400410-很专业,信誉很好!希望可以帮助你们.加QQ:2540400410 专业为你服务:手机通话记录查询,手机通话详单查询,

学完Python好找工作吗?为什么有人学完找不到工作?

学完Python好找工作吗?很多人学了Python还是找不到工作,为什么?自己在学习Python,怕以后不好找工作,想问问前辈们,现在Python的工作好找吗?也看到很多人找不到Python工作,是为什么呢?创一个小群,供大家学习交流聊天如果有对学python方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学python能够持之以恒python爱好群,如果你想要学好python最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐