UVA 1644 - Angle and Squares(简单几何)

题目链接 https://cn.vjudge.net/problem/UVA-1643

【题意】
第一象限里有一个角,把n个给定边长的正方形摆在这个角里,角度随意,使得角和正方形围成的封闭图形面积最大,输出最大面积

【思路】
按下面这样放可以使得面积最大
这里写图片描述
用三角形OAB面积减去所有正方形面积的一半即可

#include<bits/stdc++.h>
using namespace std;

int n;
double xa,ya,xb,yb;

int main(){
    while(scanf("%d",&n)==1 && n){
        scanf("%lf%lf%lf%lf",&xa,&ya,&xb,&yb);
        if(ya*xb<xa*yb){
            swap(xa,xb);
            swap(ya,yb);
        }
        double m=0,s=0;
        for(int i=0;i<n;++i){
            double a;
            scanf("%lf",&a);
            m+=a;
            s+=a*a/2;
        }
        double x0=(1+ya/xa)*m/(ya/xa-yb/xb);
        double y0=yb/xb*x0;
        double h=(x0+y0)/sqrt(2);
        double w=m*sqrt(2);
        double ans=w*h/2-s;
        printf("%.3lf\n",ans);
    }
    return 0;
}
posted @ 2018-08-24 20:09  不想吃WA的咸鱼  阅读(101)  评论(0编辑  收藏  举报