poj 3587 The Biggest Cake 正弦定理
阿新 • • 發佈:2019-01-05
題意:
給n個點,求其中3個點構成三角形的最大外接圓半徑。
分析:
正弦定理,A/sina=B/sinb=C/sinc=ABC/(2*s)=2*R。
程式碼:
//poj 3587 //sep9 #include <iostream> #include <cmath> using namespace std; const int maxN=700; double dis[maxN][maxN]; double x[maxN],y[maxN]; double cross(double x1,double y1,double x2,double y2) { return x1*y2-x2*y1; } int main() { int cases; scanf("%d",&cases); while(cases--){ int n; double ans=0.0; scanf("%d",&n); for(int i=0;i<n;++i) scanf("%lf%lf",&x[i],&y[i]); for(int i=0;i<n;++i) for(int j=i+1;j<n;++j){ double dx=x[i]-x[j]; double dy=y[i]-y[j]; dis[i][j]=dis[j][i]=sqrt(dx*dx+dy*dy); } for(int i=0;i<n;++i) for(int j=i+1;j<n;++j) for(int k=j+1;k<n;++k){ double t=fabs(cross(x[k]-x[i],y[k]-y[i],x[j]-x[i],y[j]-y[i])); ans=max(ans,dis[i][j]*(dis[j][k]/2.0)*(dis[k][i]/t)); } printf("%.3lf\n",ans); } return 0; }