poj3122 binary search 实数区间
| 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 various sizes. F of my friends are coming to my party and each of them gets a piece of pie. This should be one piece of one pie, not several small pieces since that looks messy. This piece can be one whole pie though.
My friends are very annoying and if one of them gets a bigger piece than the others, they start complaining. Therefore all of them should get equally sized (but not necessarily equally shaped) pieces, even if this leads to some pie getting spoiled (which is better than spoiling the party). Of course, I want a piece of pie for myself too, and that piece should also be of the same size.
What is the largest possible piece size all of us can get? All the pies are cylindrical in shape and they all have the same height 1, but the radii of the pies can be different.
Input
- One line with two integers N and F with 1 ≤ N, F ≤ 10 000: the number of pies and the number of friends.
- One line with N integers ri with 1 ≤ ri ≤ 10 000: the radii of the pies.
Output
Sample Input
3
3 3
4 3 3
1 24
5
10 5
1 4 2 3 4 5 6 5 4 2
Sample Output
25.1327
3.1416
50.2655
题目大意:国人很多事情都追求公平,分饼也是如此,现在这里有n个饼,每一个饼都可以看做一个圆柱体,高都是1,但是半径不同,
每一个人都可以分到某个饼的一部分,但是只能要一部分,而不能要好几块饼,最终结果必须保证每个人分到的饼的体积(面积)相等,
问你每个人能够获得的饼的最大面积是多少。
思路分析:首先数据量很大,如果用暴力枚举肯定会超时,很显然我们应该采用二分逼近的方法来确定答案,但是在实际操作的时候还是
出了一些问题,首先,二分精度不能够太高,1e-5就可以,精度太高会超时,其次,关于π,如果写做3.1415926会被精度卡掉,将pi
定义为acos(-1.0)就可以了。
代码:
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<iostream>
#include<algorithm>
#include <cmath>
#define LL long long
using namespace std;
const int maxn=10000+100;
const double pi=acos(-1.0);
double a[maxn];
int n,f;
double s(double r)
{
return pi*r*r;
}
bool check(double x)
{
int t=0;
for(int i=0;i<n;i++)
{
double p=s(a[i]);
while(p>=x)
{
p-=x;
t++;
if(t>=f+1) return true;
}
}
return false;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
double sum=0.0;
scanf("%d%d",&n,&f);
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i]);
sum+=s(a[i]);
}
sort(a,a+n);
double l=0.0,r=sum/(f+1)*1.0;
double ans=0;
while(l+0.000001<=r)
{
double mid=(l+r)/2;
if(check(mid)) ans=mid,l=mid;
else r=mid;
}
printf("%.4lf\n",ans);
}
return 0;
}
poj3122 binary search 实数区间的更多相关文章
- uva 10304 - Optimal Binary Search Tree 区间dp
题目链接 给n个数, 这n个数的值是从小到大的, 给出个n个数的出现次数. 然后用他们组成一个bst.访问每一个数的代价是这个点的深度*这个点访问的次数. 问你代价最小值是多少. 区间dp的时候, 如 ...
- Binary Search
Binary Search [原文见:http://www.topcoder.com/tc?module=Static&d1=tuto ...
- Algo: Binary search
二分查找的基本写法: #include <vector> #include <iostream> int binarySearch(std::vector<int> ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...
- [LeetCode] Unique Binary Search Trees II 独一无二的二叉搜索树之二
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
- 【转】STL之二分查找 (Binary search in STL)
Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range 本文是对Effective STL第4 ...
- STL之二分查找 (Binary search in STL)
STL之二分查找 (Binary search in STL) Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound ...
- 九章算法系列(#2 Binary Search)-课堂笔记
前言 先说一些题外的东西吧.受到春跃大神的影响和启发,推荐了这个算法公开课给我,晚上睡觉前点开一看发现课还有两天要开始,本着要好好系统地学习一下算法,于是就爬起来拉上两个小伙伴组团报名了.今天听了第一 ...
随机推荐
- Ping命令详解
引言:我们每天都在使用Ping命令,但是我们可能不太清楚Ping的工作原理,对运行结果中的很多细节也不是很清楚.查找了一下资料,现在和大家分享一下Ping的运行原理和相关细节. A.Ping命令的工作 ...
- CSS XHTML规范化命名参考
CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:l ...
- python学习第十三天 -模块和包
模块和包 大家都知道,在计算机程序开发的过程中,随着程序代码越写越多,这样代码就会越不容易维护. 有时候为了好维护代码,把不同功能的函数放到不同的xx.py文件中. 在python中,一个.py文件就 ...
- ocos 信号量
信号量分为 :声明信号量.互斥信号量 转: ucos-ii学习笔记——信号量的原理 ucos-ii学习笔记——信号量的原理及使用 #include "INCLUDES.h" ...
- ububtu 彻底卸载程序的几种方法
sudo apt-get purge ......(点点为为程序名称) sudo apt-get autoremove sudo apt-get clean dpkg -l |grep ^rc|awk ...
- Request对象 --web浏览器向web服务端的请求
一]Request对象常用方法 1)StringBuffer getRequestURL() url表示访问web应用的完整路径 2)Stri ...
- cf Perfect Pair
http://codeforces.com/contest/318/problem/C #include <cstdio> #include <cstring> #includ ...
- 64位调试器花费的时间比预期的要长(A 64-bit debugging operation is taking longer than expected)
在stackoverflow上找到解决方案的: http://stackoverflow.com/questions/21329899/vs2013-professional-local-64-bit ...
- Eclipse中安装TestNG插件
在Eclipse中安装TestNG也像安装其他插件一样非常方便,如下: 选择菜单:Help->Install New Software,然后在弹出窗口中的“Work with”中输入地址: ht ...
- 【转】android 5.0 64bit系统加载库文件失败问题浅析
原文网址:http://blog.csdn.net/andrewblog/article/details/43601303 最近公司的一个项目使用android 5.0 64 bit平台,相对以前版本 ...