UVa1643 - Angle and Squares(几何)

有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;
}
时间: 2024-10-09 00:48:30

UVa1643 - Angle and Squares(几何)的相关文章

UVA - 1643 Angle and Squares (角度和正方形)(几何)

题意:第一象限里有一个角,把n(n <= 10)个给定边长的正方形摆在这个角里(角度任意),使得阴影部分面积尽量大. 分析:当n个正方形的对角线在一条直线上时,阴影部分面积最大. 1.通过给定的xa,ya,xb,yb,可求k1,k2. 2.当n个正方形的对角线在一条直线上时,设A(x1,k1*x1),B(x2,k2*x2), 可列方程组: 解得 3.利用叉积算出AOB的面积,再减去正方形面积和的一半. #pragma comment(linker, "/STACK:102400000, 1

UVa 1643 Angle and Squares (计算几何)

题意:有n个正方形和一个角(均在第一象限中),使这些正方形与这个角构成封闭的阴影区域,求阴影区域面积的最大值. 析:很容易知道只有所有的正方形的对角形在一条直线时,是最大的,然后根据数学关系,就容易得到答案. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #incl

UVa 1643 Angle and Squares

题意: 如图,有n个正方形和一个角(均在第一象限中),使这些正方形与这个角构成封闭的阴影区域,求阴影区域面积的最大值. 分析: 直观上来看,当这n个正方形的对角线在一条直线上时,封闭区域的面积最大.(虽然我不太会证明,=_=||) 设所有正方形边长之和为L,OA.OB两直线方程分别为:y = k1x  y = k2x,设A(x1, k1x1), B(x2, k2x2),可列出方程: ,解得,相应的就得到AB两点坐标,用叉积算出△OAB的面积再减去这些正方形面积的一半就是答案. 1 #includ

as3 公式

AS3缓动公式:sprite.x += (targetX - sprite.x) * easing;//easing为缓动系数变量sprite.y += (targetY - sprite.y) * easing;AS3弹性公式:vx += (targetX - sprite.x) * spring;//spring为弹性系数vy += (targetY - sprite.y) * spring;sprite.x += (vx *= friction);//friction为摩擦力sprite.

AS3动画效果常用公式

缓动公式: sprite.x += (targetX – sprite.x) * easing;//easing为缓动系数变量 sprite.y += (targetY – sprite.y) * easing; 弹性公式: vx += (targetX – sprite.x) * spring;//spring为弹性系数 vy += (targetY – sprite.y) * spring; sprite.x += (vx *= friction);//friction为摩擦力 sprite

UVALive 6602 Counting Lattice Squares 【几何】【机智】

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4613 题目大意:给你一个n*m的矩阵格子,在这n*m的矩阵格子中要你选出四个点,形成一个正方形,让正方形的面积为奇数,问可以形成多少个这样的正方形. 题目思路:从每一个奇数开始作为一个基本单元. 面积     边 能组成的正方形: 1*1      1      

简单几何(线段覆盖) POJ 3347 Kadj Squares

题目传送门 题意:告诉每个矩形的边长,它们是紧贴着的,问从上往下看,有几个还能看到. 分析:用网上猥琐的方法,将边长看成左端点到中心的距离,这样可以避免精度问题.然后先求出每个矩形的左右端点,然后如果被覆盖那么将端点更新到被覆盖的位置.最后看那些更新后左端点小于右端点,这些是可以看得到的. /************************************************ * Author :Running_Time * Created Time :2015/10/28 星期三

抛物线的几何性质(传统几何法推导)

抛物线有很多几何性质,网上也有不少关于这些性质的推导的文章,不过几乎清一色地都是用的解析几何的方法.联立方程,导出根与系数的关系,算算算算算…… 但是,与同样是二次曲线的椭圆和双曲线不同,圆和抛物线的几何性质非常「好」,不用坐标法,也能推出很多结论.不过相比具有完美对称性的圆来说,抛物线还是逊色了许多.圆的切线很容易用几何条件去描述(容易用反证法证出圆的切线垂直于过切点的直径),而抛物线的切线虽然也容易用几何条件描述,但相关结论却难以用纯几何法证出.所以涉及切线问题时,还是需要用坐标法证明一个重

【几何模板加点小思路】hdu-4998 Rotate

用几何模板敲的,也有直接公式推的,追求短代码的可以点右上角小红了...... 题意就是想想一个物体分别做绕某一点(给出坐标)旋转p度(给出角度)后,其位置等价于绕哪一点旋转多少度,输出该等价点及其等价角度. 其实就是找两个定点,然后看这两个定点旋转后到了哪,分别连接原点与旋转后的点会得到两条线段,两条线段垂直平分线的交点即是等价后绕其旋转的点,再将该交点与任一原点及其旋转后的点连接得到的夹角(咖啡色角)即等价后的旋转角度. 附代码 1 #include <cstdio> 2 #include