UVA 1644 - Angle and Squares(简单几何)
程序员文章站
2022-05-31 20:26:12
...
题目链接 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;
}