• POJ 1064 Cable master (二分答案)


    题目链接:http://poj.org/problem?id=1064

    有n条绳子,长度分别是Li。问你要是从中切出m条长度相同的绳子,问你这m条绳子每条最长是多少。

    二分答案,尤其注意精度问题。我觉得关于浮点数的二分for循环比while循环更好一点。注意最后要用到floor 保证最后答案不会四舍五入。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 using namespace std;
     5 int n , m;
     6 double len[int(1e4 + 5)];
     7 
     8 bool check(double x) {
     9     int res = 0;
    10     for(int i = 0 ; i < n ; ++i)
    11         res += int(len[i] / x);
    12     return res >= m;
    13 }
    14 
    15 int main()
    16 {
    17     while(~scanf("%d %d" , &n , &m)) {
    18         for(int i = 0 ; i < n ; ++i)
    19             scanf("%lf" , len + i);
    20         double l = 0 , r = 10000000.0;
    21         for(int i = 0 ; i < 100 ; ++i) {
    22             double mid = (l + r) / 2.0;
    23             if(check(mid))
    24                 l = mid;
    25             else
    26                 r = mid;
    27         }
    28         printf("%.2f
    " , floor(l * 100) / 100);
    29     }
    30 }
  • 相关阅读:
    高效是如何来的
    find 删除指定日期的文件
    MySQL基础教程
    grep search information
    关于进程的问题
    linux useradd 命令
    host and ip 的关系
    git cherry-pick 教程
    正则练习
    正则表达式-获取
  • 原文地址:https://www.cnblogs.com/Recoder/p/5523062.html
Copyright © 2020-2023  润新知