ZOJ 3762Pan's Labyrinth 计算几何

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZOJ 3762Pan'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[505];
int d[505];
double dist(int i,int j)
{
    return hypot(fabs(p[i].x-p[j].x),fabs(p[i].y-p[j].y));
}
double solve(int i,int j,int k)
{
    double a=dist(i,j),b=dist(i,k),c=dist(j,k);
    double p=(a+b+c)/2;
    double s=sqrt(p*(p-a)*(p-b)*(p-c));
    a=min(a,b);
    a=min(a,c);
    return 2*s/a;
}
int main()
{
    int i,j,k,m,n;
    while(scanf("%d",&n)!=EOF)
    {
        memset(d,0,sizeof(d));
        double ans=0;
        for(i=0;i<n;i++)
            scanf("%lf%lf",&p[i].x,&p[i].y);

        for(i=0;i<n;i++)
        {
            double maxx=0;
            for(j=0;j<n;j++)
            {
                if(i==j) continue;
                if(dist(i,j)>maxx)
                {
                    maxx=dist(i,j);
                    d[i]=j;
                }
            }
        }
        for(i=0;i<n;i++)
        {
            for(j=i+1;j<n;j++)
            {
                if(d[i]==j||d[j]==i) continue;
                ans=max(ans,solve(i,j,d[i]));
                ans=max(ans,solve(i,j,d[j]));
            }
        }
        printf("%.6f\n",ans);
    }
    return 0;
}

 

以上是关于ZOJ 3762Pan's Labyrinth 计算几何的主要内容,如果未能解决你的问题,请参考以下文章

ZOJ 4019 Schrödinger's Knapsack

ZOJ 3696 Alien's Organ(泊松定理,期望值)

2017浙江省赛 D - Let's Chat ZOJ - 3961

ZOJ 3631 Watashi's BG(超大背包问题)

zoj 1100 - Mondriaan&#39;s Dream

zoj 4019 Schrödinger's Knapsack