ZOJ3203 Light Bulb[三分/推公式]
来源:互联网 发布:生猛海鲜知乎 编辑:程序博客网 时间:2024/05/22 01:25
Description
Compared to wildleopard's wealthiness, his brother mildleopard is rather poor. His house is narrow and he has only one light bulb in his house. Every night, he is wandering in his incommodious house, thinking of how to earn more money. One day, he found that the length of his shadow was changing from time to time while walking between the light bulb and the wall of his house. A sudden thought ran through his mind and he wanted to know the maximum length of his shadow.
Input
The first line of the input contains an integer T (T <= 100), indicating the number of cases.
Each test case contains three real numbers H, h and D in one line. H is the height of the light bulb while h is the height of mildleopard. D is distance between the light bulb and the wall. All numbers are in range from 10-2 to 103, both inclusive, and H - h >= 10-2.
Output
Sample Input
32 1 0.52 0.5 34 3 4
1.0000.7504.000
题意:
题解:
计算出来的这条式子,可以直接进行三分,求出极值点,但是同样,我们可以通过这条公式用O(1)的方法求出来
三分写法:
#pragma comment(linker, "/STACK:102400000,102400000")#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<algorithm>#include<queue>#include<stack>#include<set>#include<map>#include<vector>using namespace std;typedef long long ll;const double esp=1e-8;double H,h,D;double cal(double x){return D-x+H-(H-h)*D/x;}double three_devide(double l,double r){double left=l,right=r,mid,midmid;while (left+esp<right){mid=(right+left)/2;midmid=(right+mid)/2;if (cal(mid)>=cal(midmid))right=midmid;elseleft=mid;}return cal(right);}int main(){ int T;scanf("%d",&T);while (T--) { scanf("%lf%lf%lf",&H,&h,&D); double l=D-h*D/H,r=D; double ans=three_devide(D-h*D/H,r); printf("%.3f\n",ans); }return 0;}
推公式写法:
#pragma comment(linker, "/STACK:102400000,102400000")#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<algorithm>#include<queue>#include<stack>#include<set>#include<map>#include<vector>using namespace std;typedef long long ll;const double esp=1e-8;double H,h,D;int main(){int T;scanf("%d",&T);while (T--){scanf("%lf%lf%lf",&H,&h,&D);double mx=D-h*D/H;if (D>=sqrt((H-h)*D) && mx<=sqrt((H-h)*D)) mx=D+H-2*sqrt((H-h)*D);else if (sqrt((H-h)*D)<mx) mx=h*D/H; else mx=h;printf("%.3lf\n",mx);}return 0;}
[作为还是渣渣的我,今年第一次给新生讲座讲二分三分,就来写写了,好紧张,导致自己讲的特别糟糕,感觉效果也不怎么好,不过,还是第一次这样呢,希望还能继续这条路.要开始继续努力的写题了,为了不让自己留下遗憾!]
- ZOJ3203 Light Bulb[三分/推公式]
- zoj3203 Light Bulb(三分)
- zoj3203 Light Bulb-----三分复习
- ZOJ 3203 Light Bulb 三分\推公式
- ZOJ3203-Light Bulb
- nyoj Light Bulb(三分方法,公式求解)
- ZOJ3203--Light Bulb(三分法)
- Light Bulb--zoj3203(三分法)
- Light Bulb(三分)
- Light Bulb(三分)
- Light Bulb-------三分查找
- ZOJ3203——Light Bulb(三分法)
- zoj 3203 Light Bulb(三分)
- zoj 3203 - Light Bulb (三分)
- zoj 3366 Light Bulb 三分
- Light Bulb+ZOJ+三分搜索
- ZOJ 3366 - Light Bulb(三分)
- zoj 3203 Light Bulb 三分
- R:混淆矩阵
- Sort Colors
- vs2013+opencv Mat图像显示到picture control控件
- Leetcode 405: Convert a Number to Hexadecimal
- HTTP 状态码
- ZOJ3203 Light Bulb[三分/推公式]
- 新书终于上市,小小炫耀一下
- Android Error:Failed to complete Gradle execution.
- 【VCS】-常见的版本控制系统(VCS)
- 一步一步详细搭建Spark集群在docker上
- 全局函数pk成员函数
- 二分查找
- 70. Climbing Stairs 类别:动态规划 难度:easy
- pyhooks方法实现键盘监控源码示例