首页 > 代码库 > poj3122
poj3122
网上有些解题报告在二分查找的精度上是照猫画虎的错误。
下面来指正。
absolute error of at most 10?3.这句话的意思是绝对误差最大为10?3
所谓绝对误差,就是说预测值跟准确值之差的绝对值。
那么二分查找的精度最小应该设置为10?4因为这样,得出的预测值跟准确值之差是不会超过10?3的。
所以以后碰到类似的描述,二分查找的精确度只需要往后面退一位即可。
其它的话,不会实数二分查找的同学,看看代码就很容易懂了,其它的也没什么好说的了。
#include<iostream> using namespace std; const int Max=10010; const double esp=1e-4,pi=3.14159265359; int num_p,num_f,p[Max]; double high,low,mid; void datain() { int i; low=high=0; scanf("%d%d",&num_p,&num_f),num_f++; for(i=0;i<num_p;i++) scanf("%d",&p[i]),p[i]*=p[i],high=max(high,(double)p[i]); } void bfind() { int sum,i; while(high-low>esp) { sum=0; mid=(high+low)/2; for(i=0;i<num_p;i++) sum+=(int)(p[i]/mid); if(sum<num_f) high=mid; else low=mid; } printf("%.4lf\n",low*pi); } int main() { int exp; scanf("%d",&exp); while(exp--) { datain(); bfind(); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。