UVa 1643 - Angle and Squares(叉乘求面积)

来源:互联网 发布:勇者之塔数据大全 编辑:程序博客网 时间:2024/05/26 07:28

给出两个点和多个正方形,求两点与原点连线和正方形围成的最大面积。
当正方形对角线共线且与两边构成等腰三角形是面积最大。联立方程求出三角形底边两点坐标,然后利用向量叉乘求出面积。

#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;}
0 0