您的位置:首页 > 其它

ZOJ 3203 Light Bulb

2011-03-29 19:48 225 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3366

让求一个家伙在那个神马屋子里走动的时候,影子的最大长度!好吧,刚开始认为一定可以通过数学方法得到一个函数,然后可以求得极值,然后,三张纸贡献出去,结果,悲剧!

这道题可以用三分的方法搞定,当然,由于这个题的数据相对来说比较弱,直接暴力也能解决,每次递增1e-3,嘿嘿嘿嘿~~

#include<stdio.h>
#include<math.h>

#define eps 1e-10
double D,H,h;
//求影子长度,解释:x 代表的是人到灯的那段距离,
//墙上影子距离求法是通过梯形的面积推出来的
//x的区间为[D*(H-h)/H,D],既人从墙到影子恰好到墙角的时候,人所在的位置
double Shadow_length(double x)
{
return (D*h-D*H+x*H)/x +(D-x);
}

int main()
{
int t;
double l,r,mid,mmid;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf",&H,&h,&D);
l=D*(H-h)/H;
r=D;
while(r-l>=eps)
{
mid=(r+l)/2;
mmid=(r+mid)/2;
if(Shadow_length(mid)>Shadow_length(mmid))
r=mmid;
else l=mid;
}
printf("%.3f/n",Shadow_length(l));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: