题目链接:传送门

题目大意:

  给出n根长度为1-1e5的电线,想要从中切割出k段等长的部分(不可拼接),问这个k段等长的电线最长可以是多长(保留两位小数向下取整)。

思路:

  很裸的题意,二分答案即可。

  但是如果使用double类型的二分会有浮点误差

  比如答案为2.50,二分的右区间r也为2.50时,则不管怎么二分,mid总是小于右区间的。也就是说mid最大只能取到2.50-eps/2 = 2.4999995,根据题意保留两位小数向下取整后的值就是2.49了。

  因此对于这题的向下取整,在取整操作之前,可以加一个 += eps,就可以避免这种浮点误差了。

同样地如果一个题目要向上取整的话,可以加一个 -= eps,从而避免浮点误差。

#include <cstdio>
#include <iostream>
#include <algorithm> using namespace std;
const int MAX_N = 1e4 + ;
const double eps = 1e-; int n, k;
double a[MAX_N];
bool check(double mid) {
int sum = ;
for (int i = ; i <= n; i++) {
sum += (int)(a[i]/mid);
}
return sum >= k;
} int main()
{
while (cin >> n >> k) {
double sum = ;
for (int i = ; i <= n; i++) {
scanf("%lf", &a[i]);
sum += a[i];
}
double ans = ;
double l = , r = sum / k;
while (r-l > eps) {
double mid = l + (r - l) / 2.0;
if (check(mid)) {
ans = max(ans, mid);
l = mid;
}
else {
r = mid;
}
}
ans += eps;
ans = (int)(ans*)/100.0;
printf("%.2f\n", ans);
// r = (int)(r*100)/100.0;
// printf("%.2f\n", r);
}
return ;
}
/*
4 11
8.02
7.43
4.57
5.39 4 14
5.99
8.00
8.00
6.00 2 5
5.99
0.99
*/

最新文章

  1. dede日期时间标签调用大全
  2. SAP SLT (Landscape Transformation) 企业定制培训
  3. win10 google浏览器设置
  4. js中我的注释规范
  5. PMP 第四章 项目整合管理
  6. 华为HG255D路由器使用OH3C进行中大校园网认证
  7. 3. 如何封装查询条件与查询结果到map中
  8. linq简介
  9. Java split用法
  10. Install GTK in Ubuntu
  11. XJOI网上同步训练DAY1 T1
  12. LintCode 推断一个二叉树树是否是还有一个二叉树的子书
  13. ABP-N层架构
  14. SpringCloud学习之DiscoveryClient探究
  15. I - Infinite Improbability Drive
  16. 常见adb指令
  17. ketlle windows下的安装(最基本)
  18. mybatis插件机制
  19. bat 脚本处理windows 文件
  20. Json Web Token(JWT)

热门文章

  1. 【调试基础】Part 4 保护模式
  2. PDF 补丁丁 0.6.0.3355 版发布(修复阅读模式、书签缩放的问题)
  3. ThinkPHP5.0 开发手册
  4. 无服务器架构(Faas/Serverless)
  5. SSM中的Mybatis的操作
  6. Saiku根据入参日期查询出对应的数据(二十)
  7. Spring MVC学习step1——框架熟悉
  8. code-Behind 技术
  9. 5、AngularJS 直接绑定显示html ($sce、$sanitize服务)
  10. ffmpeg奇数分辨率转码失败