【基本二分】HDU2199-精度控制求解
2012-11-06 12:45
330 查看
最近处于乱撞状态,看到哪算哪,当然以基础的模拟,搜索,字符串为主+少量的计算几何理论学习还有一堆比赛中用来签到的水题,因为确实不会了
瓶颈期ORZ..
这个题是二分思想的典范,一个left,一个right,一个middle为他们除2,数据是线性的,所以不用排序,多了的话就把尾部往前挪(tail=ans-极小),少的话把头部往后挪(head=ans+极小),直到(尾-头=极小)为止,这便是二分思想。
一个函数,精度控制4位,所以C++的话用iomanip,C的%lnf控制就有用了,精度差了一丁点,但还是AC了,可能是GCC版本的问题。
瓶颈期ORZ..
这个题是二分思想的典范,一个left,一个right,一个middle为他们除2,数据是线性的,所以不用排序,多了的话就把尾部往前挪(tail=ans-极小),少的话把头部往后挪(head=ans+极小),直到(尾-头=极小)为止,这便是二分思想。
一个函数,精度控制4位,所以C++的话用iomanip,C的%lnf控制就有用了,精度差了一丁点,但还是AC了,可能是GCC版本的问题。
#include <iostream> #include <iomanip> #include <cmath> using namespace std; double f(double x) { return 8*pow(x,4.0)+7*pow(x,3.0)+2*pow(x,2.0)+3*x+6; } int main() { int testcase; cin>>testcase; for(int i=0;i<testcase;i++) { double y; cin>>y; if(f(0)>y || f(100)<y) { cout<<"No solution!"<<endl; } else { double head=0,tail=100; while(tail-head > 1e-6) { double middle=(head+tail)/2.0; double answer=f(middle); if(answer>y) { tail=middle-1e-7; } else { head=middle+1e-7; } } cout<<setiosflags(ios::fixed)<<setprecision(4)<<(tail+head)/2.0<<endl; } } return 0; }
相关文章推荐
- 二分搜索--控制精度--hdu2199 Can you solve this equation
- SDUST - Training F HDU2199 方程求解,二分查找,精度控制
- 二分求解 切绳子 (浮点数易出现精度问题)
- HDU 2899 Strange fuction 二分 + 精度控制
- 二分——HDU1551:Cable master (精度控制)
- POJ 1064 Cable master——二分 + 精度控制
- POJ1064Cable master(二分, 精度控制)
- HDU—2899—strange fuction—【二分】【精度控制】
- (二分,精度控制)Can you solve this equation?--HDOJ
- codeforces 24E (二分答案,精度控制)
- ZOJ3806 二分计算几何eps控制精度
- poj 1064 二分控制精度
- HDU Strange fuction(二分+精度控制)
- HDU—2199—Can you solve this equation?—【二分】【精度控制】
- hdu2199 Can you solve this equation? (二分+double精度)
- POJ - 1064-Cable master-(二分,精度控制)
- poj 1064 Cable master 【二分 + 精度控制】
- UVA 10341- Solve It(二分+精度求解方程值)
- poj 1064 (二分+控制精度) && hdu 1551
- POJ1064 Cable master(二分,精度控制)