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

poj3122,布布扣,bubuko.com

时间: 2024-10-22 15:39:19

poj3122的相关文章

【poj3122】 Pie

http://poj.org/problem?id=3122 (题目链接) 题意:给出N个pie的半径和F个friend,每个friend得到的pie必须一样,求每个人能得到的pie的最大大小. solution  经典二分答案. 代码: // poj3122 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #i

poj3122 binary search 实数区间

Pie Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14536   Accepted: 4979   Special Judge Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N of them, of various tastes and of

POJ3122 Pie

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15473   Accepted: 5302   Special Judge Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N of them, of various tastes and of vari

4thweek.P_C poj3122 二分法

分配派问题题目大意: 我要过生日了,准备了n个不同半径大小的圆形的pie,我有f 个朋友要来参加我的聚会,我要将pie公平分配,且给每人(包括我自己)分配一块尽量大的pie.(因为碎块看起来不上台面.)求分配每个人的pie的体积的最大值.(pie的厚度一定,等于1) 分析: 运用二分法:将每个人能分配到的pie最大体积区间一直二分,直到不满足条件:while(left+0.0001<right).   体积区间为[left,right]. Input:One line with a positi

POJ-3122(二分算法)

//题意:这是一个分蛋糕的游戏, t个测试数据,输入n, f n代表的是n块蛋糕,蛋糕的高为1, f代表的是f个人朋友,然后输入每份蛋糕的半径 // 将n块蛋糕分成 f+1 份 每一份都是完成的一块蛋糕,但是可以形状不一样,就每个人最大的蛋糕体积 v , //注意 pi 精度不能小于 3.14159265359 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream

POJ3122 Pie(二分)

题目链接:http://poj.org/problem?id=3122 题意:一堆人分蛋糕,每人蛋糕大小一样,求最大能分多少,蛋糕必须是整块整块的,不能两块拼一起.然后注意输入F个人最后要分F+1份. 思路:很简单很水,但是精度处理很恶心,wa了很多发,直接二分蛋糕的半径就行了 AC代码: 1 #include<iostream> 2 #include<vector> 3 #include<cstdio> 4 #include<algorithm> 5 #i

acm常见算法及例题

转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法

二分法练习1

在房神的激励下我开始预习二分法啦~ poj3273 Monthly Expense (二分,最大值最小化) 题意:将N个账款分割成M个财务期,使得每个分期账款和的最大值最小. 题解:贪心思想,二分法.上界为N天花费总和,下界为每天花费的最大值.根据mid值遍历n天花费看是否满足M各财务期条件 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int main(){ 5 int n,m,i,cnt,a[

ACM算法总结及刷题参考

参考:http://bbs.byr.cn/#!article/ACM_ICPC/11777 OJ上的一些水题(可用来练手和增加自信)(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965)    (2)贪心(poj1328,poj2109,poj2586)    (3)递归和分治法.     (4)递推.     (5)构造法.(po