信息
- ID
- 362
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
我太难了 这题居然是普及+/提高(绿题) 清华集训 2015 还有三分 废话少说,上代码
#include<bits/stdc++.h>
#define MAXN 100000
using namespace std;
int n;
double H,h,D;
double ask(double x) {//返回大的那种情况
if(x<=h*D/H) return x+(H-(H-h)*D/(D-x));
else return x-D+((D-x)*H/(H-h));
}
void three_cut() {//三分,具体原理不懂可以去看模板题题解
double l=0,r=MAXN;
while(r-l>=0.0000001) {
double lmid=l+(r-l)/3;
double rmid=r-(r-l)/3;
if(ask(lmid)>ask(rmid)) r=rmid;
else l=lmid;
}
printf("%.3lf\n",ask(l));
}
int main(void) {
scanf("%d",&n);
for(int i=0;i<n;i++) {
scanf("%lf%lf%lf",&H,&h,&D);
three_cut();
}
return 0;
}