欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-31 20:26:12
...

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

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

【思路】
按下面这样放可以使得面积最大
UVA 1644 - Angle and Squares(简单几何)
用三角形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;
}
相关标签: 简单几何