UVa1643 - Angle and Squares
程序员文章站
2022-06-02 11:42:00
...
转载于原文链接:https://blog.csdn.net/a197p/article/details/45670221
有n个正方形和一个角(均在第一象限中),使这些正方形与这个角构成封闭的阴影区域,求阴影区域面积的最大值。
分析:
直观上来看,当这n个正方形的对角线在一条直线上时,封闭区域的面积最大。
设所有正方形边长之和为L,OA、OB两直线方程分别为:y = k1x y = k2x,设A(x1, k1x1), B(x2, k2x2),可列出方程:
,解得,相应的就得到AB两点坐标,用叉积算出△OAB的面积再减去这些正方形面积的一半就是答案。
#include<cstdio>
#include<algorithm>
using namespace std;
struct Point{
double x,y;
Point(double x=0,double y=0):x(x),y(y){}
};
double Cross(const Point& A,const Point& B){
return A.x*B.y-A.y*B.x;
}
int main()
{
int n;
while(scanf("%d",&n)&&n){
Point A,B;
double L=0,subArea=0,l;
scanf("%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y);
for(int i=0;i<n;i++){
scanf("%lf",&l);
L+=l;
subArea+=l*l/2;
}
double k1=A.y/A.x,k2=B.y/B.x;
if(k1>k2) swap(k1,k2);
double x1=(k1+1)*L/(k2-k1),y1=k1*x1;
double x2=(k2+1)*L/(k2-k1),y2=k2*x2;
A=Point(x1,y1),B=Point(x2,y2);
double ans=Cross(A,B)/2-subArea;
printf("%.3f\n",ans);
}
return 0;
}
上一篇: PHP正则匹配函数之间的区别介绍
下一篇: php判断数据库是否连接成功的测试例子
推荐阅读
-
HtoA怎么激活?Solid Angle Houdini To Arnold v3.0.1 for Houdini 激活图文教程
-
《UnityAPI.Quaternion四元数》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Quaternion+Angle+Dot+Euler+立钻哥哥++OK++)
-
LeetCode977.Squares of a Sorted Array
-
有序数组的平方(Squares of a Sorted Array)javascript
-
cf314E. Sereja and Squares(dp)
-
【题解】 LGP2730 【魔板 Magic Squares】
-
⭐⭐⭐⭐⭐【BFS求最小次数】LeetCode 279. Perfect Squares
-
USACO 1.2.4 Palindromic Squares
-
Android开源游戏引擎之Angle(二)——开始前的准备
-
Android开源游戏引擎之Angle(二)——开始前的准备