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