二分与三分
(写的很早忘了发布了...)今天高二的学长学姐们进行了二分和三分的测试(又名一本通课后题测试),感觉这个好有意思~
关于什么是二分,三分,先咕咕咕了,来看一道题。
灯泡:https://loj.ac/problem/10016
题意概述:给出$H,h,D$,求阴影的最长长度(包括地上的和墙上的)。
有种初中数学的既视感。
解:设灯泡为$A$,人头为$B$,连接$AB$并延长,与地面的延长线交于点$C$.
于是就结束了...吗?
还有一种可能就是影子并没有到墙上去,但是影响不大,两个函数叠加起来还是单峰的,似乎就是那种对勾函数?
1 # include <cstdio> 2 # include <iostream> 3 4 using namespace std; 5 6 int T; 7 double H,h,d,a1,a2; 8 double ans,l,r,lmid,rmid; 9 10 double f (double x) 11 { 12 double ans=0,a,b; 13 b=h*(d-x)/(H-h); 14 if(b<=x) 15 return b; 16 ans+=x; 17 a=(x*H-d*h)/(h-H); 18 ans+=a*h/(x+a); 19 return ans; 20 } 21 22 int main() 23 { 24 scanf("%d",&T); 25 while (T--) 26 { 27 scanf("%lf%lf%lf",&H,&h,&d); 28 l=0,r=d,ans=0; 29 while (r-l>=0.0001) 30 { 31 lmid=l+(r-l)/3.0; 32 rmid=r-(r-l)/3.0; 33 a1=f(lmid); 34 a2=f(rmid); 35 if(f(lmid)<f(rmid)) 36 l=lmid; 37 else 38 r=rmid; 39 } 40 printf("%.3lf\n",f(l)); 41 } 42 return 0; 43 }
---shzr