hdu 5432 Pyramid Split(二分)
2015-09-12 22:06
176 查看
题目链接:hdu 5432 Pyramid Split
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 10005;
const double eps = 1e-4;
int N;
double A[maxn], B[maxn];
double judge(double h) {
double ret = 0;
for (int i = 0; i < N; i++) {
if (A[i] < h) continue;
double a = A[i] - h;
double b = a * B[i] / A[i];
ret += a * b * b;
}
return ret;
}
int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
double l = 0, r = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%lf", &A[i]);
r = max(r, A[i]);
}
for (int i = 0; i < N; i++) scanf("%lf", &B[i]);
double ans = judge(0) / 2;
while (fabs(r - l) > eps) {
double mid = (l + r) / 2;
if (judge(mid) > ans) l = mid;
else r = mid;
}
printf("%d\n", (int)l);
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 10005;
const double eps = 1e-4;
int N;
double A[maxn], B[maxn];
double judge(double h) {
double ret = 0;
for (int i = 0; i < N; i++) {
if (A[i] < h) continue;
double a = A[i] - h;
double b = a * B[i] / A[i];
ret += a * b * b;
}
return ret;
}
int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
double l = 0, r = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%lf", &A[i]);
r = max(r, A[i]);
}
for (int i = 0; i < N; i++) scanf("%lf", &B[i]);
double ans = judge(0) / 2;
while (fabs(r - l) > eps) {
double mid = (l + r) / 2;
if (judge(mid) > ans) l = mid;
else r = mid;
}
printf("%d\n", (int)l);
}
return 0;
}
相关文章推荐
- 开源代码网站
- 2. Android系统结构
- BPMN2.0规范及iactiviti
- BestCoder Round #55 ($) 1001
- 写一个标准的c程序需要包含的头文件
- 安装rvm(ruby version management)
- [ios 程序启动与运转] - RunLoop个人小结
- C++11 并发指南二(std::thread 详解)
- 23种设计模式彩图-设计模式之禅
- nodejs与grunt
- Android0909<十四>(Service、Android线程)
- 成绩转换
- swftools使用
- 锋利的Jquery【读书笔记】 -- 第一章
- CSS清除浮动
- iOS开发: UITableViewCell的自适应高度
- LeetCode Binary Search Tree Iterator
- HDU 1159 【基础DP 最长公共子序列】
- base64编解码方法
- C++_队列的两种实现方法