ZOJ 3203-B - Light Bulb-三分

来源:互联网 发布:淘宝活动时间 编辑:程序博客网 时间:2024/05/29 13:23

影子分为两部分,当人从A点走到墙,函数是先递增再递减,为凸性函数,所以三分就好


#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>#include<set>#include<map>#include<vector>#include<stack>#include<queue>using namespace std;#define INF 0x3f3f3f3f3f3f3f#define MAX 105          double H,D,h;double end;double F(double x){if (x>=end)   return (D-x)*h/(H-h); else {double y=(H*x-h*D)/(h-H);double ret=h*y/(x+y);ret+=x;return ret;}}int main(){    int t;    cin>>t;    while(t--)    {  cin>>H>>h>>D;   end=D*h/H;  double l=0,r=D;  int i;   for (i=0;i<100;i++)  {double m1=l+(r-l)/3;double m2=r-(r-l)/3;if (F(m2)>F(m1))l=m1;elser=m2;   }  printf("%.3lf\n",F(r));    }    return 0;}


0 0
原创粉丝点击