解法:
(1) 利用三分查找两边角度,求出围成最大面积的那个角度
此处用角度求面积方法:余弦公式 得到对角线C边长度
再用海伦公式可分别求出两个三角形面积,然后相加为四边形面积
#include<bits/stdc++.h> double pi=acos(-1); using namespace std; double a,b,c,d; double A,B,C,D; double S(double x,double y,double z) { double p=(x+y+z)/2; return sqrt(p*(p-x)*(p-y)*(p-z)); } double get(double x) { double cc=sqrt(a*a+b*b-2*a*b*cos(x)); double sum=0; sum+=S(a,b,cc); sum+=S(c,d,cc); return sum; } int main() { double hh[5]; scanf("%lf%lf%lf%lf",&hh[0],&hh[1],&hh[2],&hh[3]); sort(hh,hh+4); A=hh[0]; B=hh[1]; C=hh[2]; D=hh[3]; double l=0.0000001; double r=pi-l; double ans=0; a=A; b=B; c=C; d=D; while(l+0.0000001<r) { double mid=(l+r)/2; double mmid=(mid+r)/2; if(get(mid)>get(mmid)) r=mmid; else l=mid; } ans=max(ans,get(l)); a=A; b=C; c=B; d=D; l=0.0000001; r=pi-l; while(l+0.0000001<r) { double mid=(l+r)/2; double mmid=(mid+r)/2; if(get(mid)>get(mmid)) r=mmid; else l=mid; } ans=max(ans,get(l)); a=A; b=B; c=D; d=C; l=0.0000001; r=pi-l; while(l+0.0000001<r) { double mid=(l+r)/2; double mmid=(mid+r)/2; if(get(mid)>get(mmid)) r=mmid; else l=mid; } ans=max(ans,get(l)); // // printf("%lf %lf\n",l,r); printf("%.15lf\n",ans); }
(2)暴力枚举角度【0.00001,3.14159】 取max即可
#include<bits/stdc++.h> double pi=acos(-1); using namespace std; double a,b,c,d; double A,B,C,D; double S(double x,double y,double z) { double p=(x+y+z)/2; return sqrt(p*(p-x)*(p-y)*(p-z)); } double get(double x) { double cc=sqrt(a*a+b*b-2*a*b*cos(x)); double sum=0; sum+=S(a,b,cc); sum+=S(c,d,cc); return sum; } int main() { double hh[5]; scanf("%lf%lf%lf%lf",&hh[0],&hh[1],&hh[2],&hh[3]); sort(hh,hh+4); A=hh[0]; B=hh[1]; C=hh[2]; D=hh[3]; double l=0.0000001; double r=pi-l; double ans=0; a=A; b=B; c=C; d=D; for(double i=0.00001;i<3.14159;i+=0.00001) { ans=max(ans,get(i)); } a=A; b=C; c=B; d=D; l=0.0000001; r=pi-l; for(double i=0.00001;i<3.14159;i+=0.00001) { ans=max(ans,get(i)); } a=A; b=B; c=D; d=C; l=0.0000001; r=pi-l; for(double i=0.00001;i<3.14159;i+=0.00001) { ans=max(ans,get(i)); } printf("%.15lf\n",ans); }
J - Janitor Troubles 三分 海伦公式
最新推荐文章于 2022-04-06 21:29:25 发布