C/C++编程学习 - 第19周 ⑩ 派
题目链接
题目描述
我的生日要到了!根据习俗,我需要将一些派分给大家。我有 N 个不同口味、不同大小的派。有 F 个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成;可以是一整个派)。
我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨。因此所有人拿到的派是同样大小的(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好。当然,我也要给自己留一块,而这一块也要和其他人的同样大小。
请问我们每个人拿到的派最大是多少?每个派都是一个高为 1,半径不等的圆柱体。
输入格式
第一行包含两个正整数两个正整数 N 和 F,表示派的数量和朋友的数量。
第二行包含 N 个 1 到 10000 之间的整数,表示每个派的半径。
输出格式
输出每个人能得到的最大的派的体积,精确到小数点后三位。
Sample Input
3 3
4 3 3
Sample Output
25.133
思路
二分,思路都在代码里了,加注释的函数应该是精度不够的原因,过不了。
C++代码:
#include<bits/stdc++.h>
#define pi acos(-1.0)
using namespace std;
double s[10010];
int r[10010], n, m, f;double ave(double mid)
{int sum = 0;for(int i = 0; i < n; i++) //一共有n个pie sum += (int)(s[i]/mid);return sum;
}/*这个不行,可能是精度不够
double ave(double mid)
{double sum = 0;for(int i = 0; i < n; i++)sum += s[i];return sum / mid;
}
*/
int main()
{while(cin >> n >> f){for(int j = 0; j < n; j++){cin >> r[j];s[j] = pi * r[j] * r[j];}double left = 0.0, right = 1000000000.0;int s = 100; //二分查找循环100次足够了 double ans;for(int k = 0; k < s; k++){double mid = (left + right) / 2.0;if(ave(mid) >= f + 1) //pie分成了ave(mid)份,份数多于人的数量,pie的尺寸还可以继续增大{ans = mid; //所以每人至少分得1份,每份的分量大约是mid //mid * ave(mid) == sum (pie的总面积) left = mid; //寻求更大的半径 }else right = mid; //份数少于人的数量,pie的尺寸需要缩小 }printf("%.3lf\n",ans);}return 0;
}
C/C++编程学习 - 第19周 ⑩ 派相关推荐
- C/C++编程学习 - 第19周 ③ 不与最大数相同的数字之和
题目链接 题目描述 输出一个整数数列中不与最大数相同的数字之和. 输入格式 输入分为两行: 第一行为N(N为接下来数的个数,N <= 100): 第二行为N个整数,数与数之间以一个空格分开,每个 ...
- C/C++编程学习 - 第2周 ⑥ 收集瓶盖赢大奖
题目链接 题目描述 蒜厂最近推出了一个"收集瓶盖赢大奖"的活动:如果你拥有 10 个印有"幸运".或 20 个印有"鼓励"的瓶盖,就可以兑换 ...
- C/C++编程学习 - 第6周 ⑦ 分离整数的各个数位
题目链接 题目描述 小蒜给了你一个整数,要求从个位开始分离出它的每一位数字. 输入格式 输入一个整数,整数在 1 到 108 之间. 输出格式 从个位开始按照从低位到高位的顺序依次输出每一位数字.数字 ...
- C/C++编程学习 - 第7周 ⑥ 合影效果
题目链接 题目描述 蒜头君和朋友们去爬香山,为美丽的景色所陶醉,想合影留念.如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右 ...
- C/C++编程学习 - 第4周 ⑦ 判断是否为两位数
题目链接 题目描述 判断一个正整数是否是两位数(即大于等于 10 且小于等于 99). 蒜头君:很简单的,快来通过它吧! 输入格式 一个正整数,不超过 1000. 输出格式 一行.若该正整数是两位数, ...
- C/C++编程学习 - 第5周 ② 向左看齐
题目链接 题目描述 上体育课时,某班 n 个小朋友排成一列.随着体育老师的一声"向左看齐",同学们都朝着左边看.现在每个同学想知道左边的同学中,有多少人的身高比自己矮. 输入格式 ...
- C/C++编程学习 - 第6周 ⑤ 球弹跳高度的计算
题目链接 题目描述 蒜头君让一个球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下.编程计算气球在第 10 次落地时,共经过多少米?第 10 次反弹多高? 输入格式 输入一个整数 ...
- C/C++编程学习 - 第7周 ④ 鸡尾酒疗法
题目链接 题目描述 鸡尾酒疗法,原指 "高效抗逆转录病毒治疗"(HAART),由美籍华裔科学家何大一于 1996 年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾滋病.该疗 ...
- C/C++编程学习 - 第5周 ⑧ 判断直角三角形
题目链接 题目描述 输入三个整数,判断用这三个整数做边长是否能构成一个直角三角形. 输入格式 输入三个整数. 输出格式 能否构成直角三角形,如能输出:"yes",若不能,输出:&q ...
最新文章
- Codeforces Round #545 B. Circus
- 暗通道优先的图像去雾算法(上)
- SpringBoot取出信息
- activiti 图片
- js设置和清除cookie
- YbtOJ#20089-[NOIP2020模拟赛B组Day10]平衡的树【贪心】
- MVC简单实现插件Demo-从底层理解MVC路由匹配浏览器请求的URL
- 库克:iPhone 12更新换代用户数达到顶峰
- Linux下的编曲软件,MuseScore(免费作曲编曲软件) V3.0.1 Linux版
- 2013年计算机运算速度慢,win7电脑运行速度很慢怎么提速|三个win7提速的技巧
- word中如何将所有同一级标题统一格式
- MySQL 之union all 与 order by 同时出现问题
- 个人财务管理系统beancount-gs
- Rosalind第88题:Counting Rooted Binary Trees
- Ubuntu安装拼音输入法
- 8种bootstrap团队会员头像样式代码
- 在 HTML 中使用 ARIA 的规则
- 肯德基创始人,在1009次失败后...
- linux scons源码安装,linux 安装scons
- 在项目中使用Liquibase