题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2199
最近二分总写TLE.....找了几道题练习了一下。
题目要求是在0到100之间找到一个x,使8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y成立。在输入数据时,若y<0或y>8*100^4 + 7*100^3 + 2*100^2 + 3*100 + 6,直接可判断为
No solution!。直接二分x的值,下界为0,上界为100,需要用double来存储,最后要求保留4位有效数字,所以要注意精度问题。就是因为精度问题开始WA了几次。。。#include<iostream> #include<cstdio> #include<cmath> using namespace std; double f(double mid) { double t=8*mid*mid*mid*mid+7*mid*mid*mid+2*mid*mid+3*mid+6; return t; } void work(double y) { double l=0,r=100; double mid; while(r-l>1e-9) { mid=(l+r)/2; if(y>f(mid)) l=mid+1e-7; else r=mid-1e-7; } printf("%.4lf\n",(l+r)/2.0); return ; } int main() { int t; while(cin>>t) { while(t--) { double y; cin>>y; if(f(0)<=y&&f(100)>=y) work(y); else printf("No solution!\n"); } } }