码迷,mamicode.com
首页 > 其他好文 > 详细

poj3122

时间:2014-06-24 15:51:41      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:class   blog   code   2014   os      

网上有些解题报告在二分查找的精度上是照猫画虎的错误。


下面来指正。

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();
	}
}


poj3122,布布扣,bubuko.com

poj3122

标签:class   blog   code   2014   os      

原文地址:http://blog.csdn.net/stl112514/article/details/34097453

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!