给出两个点和多个正方形,求两点与原点连线和正方形围成的最大面积。
当正方形对角线共线且与两边构成等腰三角形是面积最大。联立方程求出三角形底边两点坐标,然后利用向量叉乘求出面积。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int main(){ int n; while(~scanf("%d",&n)&&n){ double ax,ay,bx,by; scanf("%lf%lf%lf%lf",&ax,&ay,&bx,&by); double l=0,ans=0; for(int i=0;i<n;++i){ double a; scanf("%lf",&a); l+=a; ans-=a*a/2; } double k1=ay/ax,k2=by/bx; if(k1>k2) swap(k1,k2); ax=(k1+1)*l/(k2-k1),ay=k1*ax; bx=(k2+1)*l/(k2-k1),by=k2*bx; ans+=(ax*by-ay*bx)/2; printf("%.3lf\n",ans); } return 0; }
|
** 本文迁移自我的CSDN博客,格式可能有所偏差。 **