读书人

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

发布时间: 2013-03-06 16:20:31 作者: rapoo

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

  • http://ac.nbutoj.com/Problem/view.xhtml?id=1347
    [1347] 老虎满坡找灰兔
  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • 老虎最近遇到一个很麻烦的问题, 有人叫他把一个五边形用一条直线分成两个三角形.
    这个五边形如下图所示, 该五边形其实是一个矩形截去一个角. 所以有三个直角. 和两个钝角.
    宁波市工程学院 OJ  [1347] 老虎满坡找灰兔

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

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

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

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

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

  • 输入
  • 本题有多组输入, 每组输入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;}


     

  • 读书人网 >编程

    热点推荐