宁波工程学院 OJ [1347] 老虎满坡找灰兔

  • http://ac.nbutoj.com/Problem/view.xhtml?id=1347

    [1347] 老虎满坡找灰兔

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • 老虎最近遇到一个很麻烦的问题, 有人叫他把一个五边形用一条直线分成两个三角形.
    这个五边形如下图所示, 该五边形其实是一个矩形截去一个角. 所以有三个直角. 和两个钝角.


    老虎就到处找兔子来解决这个问题. 兔子呢就拿出来一把刷子, 一条粗粗的直线. 然后两个三角形就很神奇的出来了.



    兔子突然想到一个问题, 要怎么刷才能使刷过的面积最小.

    现在, 我们以五边形的两条边做坐标系, 如下图所示

  • 输入
  • 本题有多组输入, 每组输入A和B的坐标. Ax, Ay, Bx, By 四个整数.
    对于每组数据满足 0 < Ax < Bx 且 0 < By < Ay
  • 输出
  • 对于每组输入, 输出在五边形上刷过的最小面积. 保留2位小数.
  • 样例输入
  • 1 2 2 1
    
  • 样例输出
  • 2.25
  • 提示
  • 来源
  • monkeyde17
     
     
    思路:
    要是刷子刷的面积最小  即划出的2个三角形的面积为s1+s2最大  
    设刷子刷到x轴上的位置为(a,0)  
    那么着时候刷子划到y轴上的点也可以用a表示出来了
    这时候就可以求出s1+s2 为一个与a有关的式子
    把和与a有关的式子提取出来之后 可以发现  当这个 式子<0的时候 a越小面积越大  当式子大于0的时候 a越大越好 
    那么当式子小于0  则a=0最好   即刷子下边缘正好切进左下角     当式子大于0  刷子上边缘正好切进左下角 这时候a最大
     
    用总面积减去s1 s2  就是最小的阴影面积
    #include<stdio.h>
    int main()
    {
    	double xa,ya,xb,yb;
        double  smax,ans1,ans2;
    	double x,y;
    	while(scanf("%lf %lf %lf %lf",&xa,&ya,&xb,&yb)!=EOF)
    	{
    		smax=ya*xb-0.5*(xb-xa)*(ya-yb);
              // if(xa*(ya-yb)-yb*(xa-xb)<0)//a最小
    		   //{
    
                       y=ya-(xa*yb)/xb;
    				   ans1=smax-0.5*xa*(ya-y);
    				   ans1=ans1-0.5*xb*yb;
    				  //printf("   %.2lf\n",ans);
    		  // }
    		  // else
    		  // {
                       x=xb-((xa*yb)/ya);
    				   ans2=smax-0.5*xa*ya;
    				   ans2-=0.5*yb*(xb-x);
    		  // }
    				   printf("%.2lf\n",ans1<ans2?ans1:ans2);
    	}
    	return 0;
    }


     
     
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值