【二分】Pie
来源:互联网 发布:广播系统 杰网络 编辑:程序博客网 时间:2024/05/17 21:47
题目
题目地址:Pie。
思路
这题刚看到的时候依然是毫无思路,看了别人的解题报告才得知可以用二分法……妙啊。
二分的过程就是在枚举每个人可以分得的面积,计算在该面积下多少人可以得到pie。如果能得到pie的人数少于总人数,说明现在的面积太大了,调整上限;否则,则说明现在的面积还可以更小一些,调整下限。
代码
// 二分查找#include<iostream>#include<algorithm>#include<iomanip>using namespace std;#define BOUND 1e-6#define pi 3.14159265359bool cmp(double a, double b){ return a > b;}double cakeSize[10001];int caseNum, cakeNum, peopleNum;double findSize(double lower, double upper){ if (upper - lower > BOUND) { int cnt = 0; double mid = (lower + upper) / 2; for (int i = 0; i < cakeNum; ++i) cnt += int(cakeSize[i] / mid); if (cnt < peopleNum) // 说明现在的形状太大了 mid = findSize(lower, mid); else // 说明现在的形状太小,还可以再大一点儿 mid = findSize(mid, upper); return mid; } return lower;}int main(){ double maxSize = 0; cin >> caseNum; while (caseNum--) { cin >> cakeNum >> peopleNum; ++peopleNum; for (int i = 0; i < cakeNum; ++i) { cin >> cakeSize[i]; cakeSize[i] *= cakeSize[i]; if (cakeSize[i] > maxSize) maxSize = cakeSize[i]; } sort(cakeSize, cakeSize + cakeNum, cmp); // sort from big to small double rst = findSize(0, maxSize); cout << fixed << setprecision(4) << pi * rst << endl; } system("pause");}
0 0
- Pie(二分)
- 【二分】Pie
- Pie (二分)
- Pie 【二分】
- Pie 二分
- Pie[二分]
- hdu pie(二分+贪心)
- POJ 3122 Pie 二分
- POJ 3122 Pie 二分
- hdu1969 Pie 二分
- POJ3122--Pie--二分
- hdu1969(pie二分)
- [hoj]Pie【二分】
- HDU1969---Pie 二分
- HDU1969:Pie(二分)
- [二分]HDOJ1969 Pie
- 二分查找 hdu1969 pie
- hdu1969 Pie 二分
- VMware 虚拟机 linux执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask) UP BROADCAST MULTICAST 问题
- 函数调用时,系统底层做了什么?
- Js处理Json数据的几种方式
- 【Zookeeper】源码分析之请求处理链(二)
- 计算机系统学习1:CPU,内存,硬盘及指令之间的关系
- 【二分】Pie
- 选夫婿2
- js中“==“和“===“的区别
- HDU-2829 Lawrence 【斜率优化DP】【四边形不等式优化】
- jQuery实现用户输入自动完成功能
- 微信项目开发与本地调试、移动调试(一)
- Leetcode 530. Minimum Absolute Difference in BST
- ET模式实现分析
- HDU-2102 A计划