LA 3635 Pie 派
2015-07-04 05:43
323 查看
题意:有F + 1个人分N个圆形派,要求每个人分得的派的面积相同,每个人分得的派均来自于某一个派(即不能将多个派各分一点拼在一起)。求每个人能分得的派的面积的最大值。
直接求不好求,但是给定一个分得的面积用于判断却不难,于是用二分做。判断当前值是否满足要求很简单,只需将每个派按照当前值看最多能分给几个人,如果N个派能分得的人数加起来不少于F + 1,则当前值满足,否则不满足。
直接求不好求,但是给定一个分得的面积用于判断却不难,于是用二分做。判断当前值是否满足要求很简单,只需将每个派按照当前值看最多能分给几个人,如果N个派能分得的人数加起来不少于F + 1,则当前值满足,否则不满足。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <algorithm> #include <stack> #include <queue> #include <vector> #include <map> #include <set> using namespace std; const double pi = acos(-1.0); const int MAX = 10005; const double INF = pi*MAX*MAX; const double eps = 1e-4; int N, F; double R[MAX]; bool judge(double x) { int cnt = 0; for(int i = 0; i < N; i++) cnt += int(pi*R[i]*R[i]/x); return cnt >= F + 1; } void input() { scanf("%d%d", &N, &F); for(int i = 0; i < N; i++) scanf("%lf", &R[i]); } void solve() { double l = 0, r = INF, mid; while(l < r - eps) { mid = (l + r)/2; if(judge(mid)) l = mid + eps; else r = mid; } if(!judge(l)) l -= eps; printf("%.4lf\n", l); } int main() { int T; scanf("%d", &T); while(T--) { input(); solve(); } return 0; }
相关文章推荐
- 【Leetcode】Course Schedule #207
- version (or platform)dependent Code
- PostGIS中命令的解释
- 数据结构和算法-011 数组排序 快速排序
- 《编程导论(Java)·4.1数据抽象的含义》
- LA 3971 Assemble 组装电脑
- 1 用户及用户组、文件夹管理
- MAC 命令
- Decorator Pattern 装饰者模式
- 微信公众号demo
- APP UI设计趋势:为好设计而动
- UVa 10795 A Diffenent Task 新汉诺塔问题
- Observer Pattern 观察者模式
- Adobe Photoshop
- PHP开发之使用CodeIgniter搭建一个简单的项目
- 网络安全靠什么?网络管理员的重要定义
- poj 2513 Colored Sticks Trie树
- java中FileOutputStream和FileInputStream类用法(总结的挺好)
- vim中输入tab符
- 博客创建