宁波工程学院 OJ [1347] 老虎满坡找灰兔
[1347] 老虎满坡找灰兔
这个五边形如下图所示, 该五边形其实是一个矩形截去一个角. 所以有三个直角. 和两个钝角.
![宁波市工程学院 OJ [1347] 老虎满坡找灰兔](http://img.reader8.net/uploadfile/jiaocheng/20140140/2717/2014012719175918630.png)
老虎就到处找兔子来解决这个问题. 兔子呢就拿出来一把刷子, 一条粗粗的直线. 然后两个三角形就很神奇的出来了.
![宁波市工程学院 OJ [1347] 老虎满坡找灰兔](http://img.reader8.net/uploadfile/jiaocheng/20140140/2717/2014012719175918631.png)
兔子突然想到一个问题, 要怎么刷才能使刷过的面积最小.
现在, 我们以五边形的两条边做坐标系, 如下图所示
![宁波市工程学院 OJ [1347] 老虎满坡找灰兔](http://img.reader8.net/uploadfile/jiaocheng/20140140/2717/2014012719175918632.png)
对于每组数据满足 0 < Ax < Bx 且 0 < By < Ay
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;}