1003 Pie
2016-04-12 17:47
148 查看
题意:
有n个披萨,f个朋友,给出披萨的半径,然后分饼,每个人的都要一样大 而且不能两块披萨拼成一块披萨;求每人分到的最大;输入是第一行表示n个数据 第二行第一个是披萨数量 第二个是人数,第三行是披萨的半径。
思路:
注意也要分给自己。
先求出总的面积 不考虑披萨不能合成 求出最大的面积 然后定义一个函数判断每个披萨减去最大面积的n倍 把所有的n加起来是否比人数多 如果比人数多 返回true 否则返回0;
用二分法定义左右数值分别为0和最大面积如果右边减左边的精度不符合 每人分到的最大就是(左+右)/2 然后判断披萨够不够 如果够 每人分到的最大复制给左 如果不够分给右 循环直到精度符合要求
输出注意格式。
虽然用了很长时间思考和编译 但是 一遍就A的感觉就是爽阿 爽的扣脚!!!不用面对各种CE WA就是爽!!
有n个披萨,f个朋友,给出披萨的半径,然后分饼,每个人的都要一样大 而且不能两块披萨拼成一块披萨;求每人分到的最大;输入是第一行表示n个数据 第二行第一个是披萨数量 第二个是人数,第三行是披萨的半径。
思路:
注意也要分给自己。
先求出总的面积 不考虑披萨不能合成 求出最大的面积 然后定义一个函数判断每个披萨减去最大面积的n倍 把所有的n加起来是否比人数多 如果比人数多 返回true 否则返回0;
用二分法定义左右数值分别为0和最大面积如果右边减左边的精度不符合 每人分到的最大就是(左+右)/2 然后判断披萨够不够 如果够 每人分到的最大复制给左 如果不够分给右 循环直到精度符合要求
输出注意格式。
#include <iostream> #include <cmath> #include<string.h> #include<iomanip> using namespace std; double pi = 3.1415926535898; double EPS = 0.00001; double pie[10001]; bool test(int b,int c,double mid) { int sum = 0; for (int j, i = 0;i < b;i++) { for (j = 0; ;j++) { if (pie[i] - j*mid > 0)continue; else break; } sum += --j; } if (sum >= c) return 1; else return 0; } int main() { int a; cin >> a; while (a--) { memset(pie, 0, 10001); int b = 0,c=0; cin >> b>>c; c++; double min = 100000*pi; double sum = 0; for (int i = 0;i < b;i++) { cin >> pie[i]; pie[i] *= pi*pie[i]; sum += pie[i]; if (min > pie[i]) min = pie[i]; } double mid ,h= sum / c,l=0; mid = h; //cout << "min" << min << " " << "mid" << mid << endl; while ((h-l)>EPS) { mid = (l + h) / 2; if (test(b, c, mid)) l = mid; else h = mid; } cout << setprecision(4) << setiosflags(ios::fixed) << mid << endl; } return 0; }
虽然用了很长时间思考和编译 但是 一遍就A的感觉就是爽阿 爽的扣脚!!!不用面对各种CE WA就是爽!!
相关文章推荐
- EditText输入框过滤空格和汉字的工具类
- 过滤器与拦截器的区别
- NC6开发配置流程
- android点击系统通知Notification,进入指定的activity
- JSPatch-使用经验记录
- 1868: UP UP UP:
- 云计算 搞些什么?
- java代码设置布局的宽和高
- Tyvj_P1005
- Android Studio问题及修改办法
- python学习10-文件处理
- 动态内存和智能指针及其实现方法
- android 焦点获取问题(手机端和TV端)
- 如何将c结构数据传给lua(转)
- 子页面获取父类页面的jQuery easyUI对象问题
- 【ln】创建硬链接
- SVG学习笔记
- JavaScript:获取系统当前时间,构造格式化的字符串
- Hadoop Core、HBase 、ZooKeeper
- 华为OJ 坐标移动