sdau-2 1003
2016-04-10 16:38
211 查看
题目:李华过生日了,买了一堆蛋糕(N个),来了一堆朋友(F个),让这F+1个人平分这堆蛋糕。每人只能分一块,蛋糕可以浪费,不能分的不均。假如你是李华,请你帮忙分一下蛋糕。
思路:一开始没注意到每人一块,以为是水题,结果GG。就是老师上课讲的那道题,不过long long我用VC编译不通过,就改double了。
每个人分到最大的面积是最大的那个,所以在0到max间找。mid*人数=max用这个式子一直循环二分,就能得出答案。
代码:
#include <iostream>
#include <cstdio>
const double pi = 3.1415926;
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, f, r;
double a[10010], high = 0, low = 0;
cin >> n >> f;
f++;
for (int i = 0; i < n; i++)
{
cin >> r;
a[i] = pi * r * r;
if (high < a[i])
high = a[i];
}
double mid;
while (high-low> 1e-6)
{
mid = (high+low) / 2;
int p = 0;
for (int i = 0; i < n; i++)
{
p += int(a[i] / mid);
}
if (p>= f)
low= mid;
else
high = mid;
}
printf("%.4lf\n", mid);
}
return 0;
}
思路:一开始没注意到每人一块,以为是水题,结果GG。就是老师上课讲的那道题,不过long long我用VC编译不通过,就改double了。
每个人分到最大的面积是最大的那个,所以在0到max间找。mid*人数=max用这个式子一直循环二分,就能得出答案。
代码:
#include <iostream>
#include <cstdio>
const double pi = 3.1415926;
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, f, r;
double a[10010], high = 0, low = 0;
cin >> n >> f;
f++;
for (int i = 0; i < n; i++)
{
cin >> r;
a[i] = pi * r * r;
if (high < a[i])
high = a[i];
}
double mid;
while (high-low> 1e-6)
{
mid = (high+low) / 2;
int p = 0;
for (int i = 0; i < n; i++)
{
p += int(a[i] / mid);
}
if (p>= f)
low= mid;
else
high = mid;
}
printf("%.4lf\n", mid);
}
return 0;
}
相关文章推荐
- Android handler机制
- 加载网络图片
- Eclipse中maven项目没法自动编译、编译失败、WEB-INF/classes目录中没有Class文件
- 2015年腾讯移动应用质量大数据报告
- Jquery实战——横纵向的菜单
- 京东2016校园实习生招聘系统测试岗在线笔试编程题
- 最大公约数和最小公倍数
- python 装饰器和 functools 模块
- Eclipse中maven项目没法自动编译、编译失败、WEB-INF/classes目录中没有Class文件
- 名企动态网站开发--js实现可拖动弹窗
- android中string.xml中%一$s、%1$d等的用法
- MFC日记选----VC篇
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- 当EditText的Gravity设置为right时, 如何让光标出现在Hint内容的右边
- Java网络编程小结 URLConnection协议处理器
- 深度理解现代浏览器中的BFC和IE下的haslayout
- 1016
- mysql数据库批量快速插入
- Android属性动画完全解析(上),初识属性动画的基本用法
- 10_输入两个正整数m和n,求其最大公约数和最小公倍数