分派pie(二分法)
2.问题描述
我的生日要到了!根据习俗,我需要将一些派分给大家。我有N个不同口味、不同大小的派。有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成
;可以是一整个派)。
我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨。因此所有人拿到的派是同样大小的
(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好。当然,我也要给自己留一块,而这一块也要和其他人的同样大小。
请问我们每个人拿到的派最大是多少?每个派都是一个高为1,半径不等的圆柱体。
输入
第一行包含两个正整数N和F,1 ≤ N, F ≤ 10 000,表示派的数量和朋友的数量。
第二行包含N个1到10000之间的整数,表示每个派的半径。
输出
输出每个人能得到的最大的派的体积,精确到小数点后三位
。
输入样例
3 3
4 3 3
输出样例
25.133
二分法————分pie
思路如下
题意 : 给你 n 个pie,m + 1 个人,每个pie的高度相同,只是他们的半径不同,
然而这个m + 1个人还很挑剔,被分的每块 子 pie 必须只能来自 n块 pie中的其中一块
思路 : 这一题就是简单的二分,我先假设分给每个人的 子pie 为 mid ,再通过二分不断缩减精确这个,所 分子pie的假设值,,,,,,,在这样我就可以得到我们想要的值
这一题的思路还可以参照 与该题相似的题
题解如下
#include<iostream>
#include<cmath>
using namespace std;
const double pi = acos(-1); //求圆周率
const int Len = 10005;
const double cha = 0.00001; //⚠️精读尽量开大一点,防止出错
int n,m;
int ar[Len];
double ans; //每个人所能分的最大子pie的大小
bool judge(double mid)
{
int m_cnt = m; //总共需要分割的数量
for(int i = 1; i <= n; i ++)
{
double V = pi * ar[i] * ar[i];
if(V >= mid)
{
m_cnt -= int(V / mid);
}
if(m_cnt <= 0)
{
return true;
}
}
return false;
}
void Binary_search(double l ,double r)
{
while(r - l > cha)
{
double mid = (l + r) / 2;
if(judge(mid)) //如果我这个假设的 子pie的大小mid,是可以完全由 n 张 pie 分割出来,那么我们要考虑 能不能把 假设子pie大小mid 调大一些(通过调整下限 mn = mid),这样再进行尝试
{
ans = mid;
l = mid;
}
else //不能够分割出来m块大小为 mid的子pie,那么我们就缩小,mid值(通过调整 上线mx = mid)
{
r = mid;
}
}
printf("%.3lf\n",ans);
}
int main()
{
//freopen("T.txt","r",stdin);
scanf("%d %d", &n, &m);
m ++; //包括自己,所以总人数 + 1
for(int i = 1; i <= n; i ++)
scanf("%d",&ar[i]);
Binary_search(0 , pi * Len * Len);
return 0;
}
分派pie(二分法)的更多相关文章
- hdu 1969 Pie (二分法)
Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- POJ 3122 pie (二分法)
Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have ...
- POJ-3122.Pie(二分法最大化平均值)
二分法的主题思路就是逐步逼近,所以这道题的思路自然一目了然,做题思路也是... 本题大意:题主过生日,它买了N块半径为R[ i ],高为1的圆柱形蛋糕,现在他要将这N块蛋糕等分给F + 1个人,为了好 ...
- 杭电ACM分类
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...
- 转载:hdu 题目分类 (侵删)
转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...
- HDU 1969 Pie(二分法)
My birthday is coming up and traditionally I’m serving pie. Not just one pie, no, I have a number N ...
- UVA 12097 LA 3635 Pie(二分法)
Pie My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a numbe ...
- UVALive 3635 Pie(二分法)
简单的二分法应用,循环1000次精度就满足要求了. #include<iostream> #include<cstdio> #include<cstdlib> #i ...
- poj3122-Pie(二分法+贪心思想)
一,题意: 有f+1个人(包括自己),n块披萨pie,给你每块pie的半径,要你公平的把尽可能多的pie分给每一个人 而且每个人得到的pie来自一个pie,不能拼凑,多余的边角丢掉.二,思路: 1,输 ...
随机推荐
- js的Set和Map集合
目录 1.js的Set介绍 1-1.Set基础用法 1-2.Set对象的操作方法 1-3.Set对象的遍历方法 2.js的Set扩展WeakSet篇 3.js的Map介绍 3-1.Map基础用法 3- ...
- mac 工具推荐
传送门: https://github.com/jaywcjlove/awesome-mac/blob/master/README-zh.md
- 关于javascript 的reduce方法
作为一个前端菜鸟,觉得资料比较好,特地分享一下~~ reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. 你一定也和我一样看的有点 ...
- 【S2-053】Struts2远程命令执行漏洞(CVE-2017-12611)
继S2-052之后,Apache Struts 2再次被曝存在远程代码执行漏洞,漏洞编号S2-053,CVE编号CVE-2017-1000112. 当开发人员在Freemarker标签中使用错误的构造 ...
- Community Cloud零基础学习(四)Builder创建自定义的布局
前几篇讲了Community Cloud权限配置等信息,但是没有太讲过 Community如何进行配置layout,本篇主要描述使用Builder去进行符合需求的Community Layout的构建 ...
- python 关于函数递归调用自己
爬取b站博人传 每页短评20个,页数超过1000页, 代码如下 import requests import json import csv def main(start_url): headers ...
- python爬虫的数据库连接问题
1.需要导的包 import pymysql 2.# mysql连接信息(字典形式) db_config ={ 'host': '127.0.0.1',#连接的主机id(107.0.0.1是本机id) ...
- Expression表达式目录树
一.初识Expression 1.在上一篇我们讲到了委托(忘记了可以在看看,点赞在看养成习惯),今天要讲的Expression也和委托有一点点关系吧(没有直接关系,只是想要大家看看我其他的文章),Ex ...
- vquery 一些应用
// JavaScript Document function myAddEvent(obj,sEv,fn){ if(obj.attachEvent){ obj.attachEvent('on'+sE ...
- 按 ctrl 时会触发 shift ,导致不能正常使用 ctrl + c 复制
问题描述 不能使用 ctrl 功能键组合,原因是按 ctrl 时 shift 也会被触发. win 10 电脑为例,可以打开虚拟键盘查看按键情况. 当我按下 ctr时 可见 shift 也被触发了. ...