zoj 3421 Error Curves(三分)
2015-07-31 20:46
246 查看
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4105
大意:很多的函数曲线,二次或一次,要构造这样的新曲线,对于每个x,新曲线对应的Y值是原来所有函数对应值的最大值。要求出新曲线上最小的y值。
新曲线还是具有二次曲线的性质,所以应当用三分法来完成查找。对于每条函数曲线都得计算y值,最后选出最大的Y,此处只能暴力计算了。
函数double cal(double x)中ans最初的取值可以取-1e10,当时自己脑子短路,写了个1e-10,结果不断的WA。写成ns=a[0]*x*x+b[0]*x+c[0]; 我觉得更好。
大意:很多的函数曲线,二次或一次,要构造这样的新曲线,对于每个x,新曲线对应的Y值是原来所有函数对应值的最大值。要求出新曲线上最小的y值。
新曲线还是具有二次曲线的性质,所以应当用三分法来完成查找。对于每条函数曲线都得计算y值,最后选出最大的Y,此处只能暴力计算了。
#include <iostream> #include<cstdio> using namespace std; double a[10005],b[10005],c[10005]; int t,n; double cal(double x){ double ans=a[0]*x*x+b[0]*x+c[0]; //good for(int i=1;i<n;i++){ double res=a[i]*x*x+b[i]*x+c[i]; if(ans<res)ans=res; } return ans; } int main() { //freopen("cin.txt","r",stdin); cin>>t; while(t--){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%lf%lf%lf",&a[i],&b[i],&c[i]); } double low=0.0,high=1000.0,mid1,mid2; while(high-low>1e-12){ mid1=low+(high-low)/3; mid2=high-(high-low)/3; if(cal(mid1)>cal(mid2))low=mid1; else high=mid2; } printf("%.4lf\n",cal(low)); } return 0; }
函数double cal(double x)中ans最初的取值可以取-1e10,当时自己脑子短路,写了个1e-10,结果不断的WA。写成ns=a[0]*x*x+b[0]*x+c[0]; 我觉得更好。
相关文章推荐
- 解决 wine 32 位 在 64 ubuntu上安装的问题
- UVA1152-4 Values whose Sum is 0
- 黑马程序员--C语言——算法与进制
- python 中文乱码问题
- hadoop之Shuffle和Sort
- hiho图的联通性(自留)
- MySql存储过程动态创建表并插入数据
- 会场安排问题
- B\S备忘录24——Jquery原理简单作死向分析
- css3导航下拉菜单
- C++第六节:拷贝构造函数
- The JavaScript Event Loop: Explained
- 英语总结
- HashMap与HashSet区别
- Exponentiation(java 大实数)
- 《R语言实战》读书笔记--第一章 R语言介绍
- python实现南大教务处通知更新进行自动推送
- 课后作业第三章
- IE浏览器弹出黄色警告时,html中使用saved from url
- Qt实现Rasdial宽带拨号