zoukankan      html  css  js  c++  java
  • 【判断解是否可行-二分】POJ1064-Cable master

    http://poj.org/problem?id=1064

    【题目大意】

    给出几条绳子的长度,问如果要切出k条长度相等的绳子,这k条绳子最常多长?

    【思路】

    二分。把下界设为0,上界设为所有绳子长度总和,每次取mid,判断如果每条绳子长为mid切出条数是否≥k,满足则将下边界设为mid,否则把上边界设为mid。因为是要保留小数的,所以通过循环来进行精确。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 using namespace std;
     7 const int MAXN=10000+500;
     8 int n,k;
     9 double len[MAXN];
    10 double sum;
    11 
    12 int whether(double x)
    13 {
    14     int num=0;
    15     for (int i=0;i<n;i++)
    16     {
    17         num+=(int)(len[i]/x);
    18     }
    19     return num>=k;
    20 }
    21 
    22 int main()
    23 {
    24     scanf("%d%d",&n,&k);
    25     for (int i=0;i<n;i++) 
    26     {
    27         scanf("%lf",&len[i]);
    28         sum+=len[i];
    29     }
    30     double lb=0,ub=sum;
    31     for (int i=0;i<100;i++)
    32     {
    33         double mid=(lb+ub)/2;
    34         if (whether(mid)) lb=mid;
    35         else ub=mid;
    36     }
    37     printf("%.2lf
    ",floor(ub*100)/100);
    38     return 0;
    39 }
  • 相关阅读:
    10.19的一些题
    10.18 模拟赛
    bzoj 2212 Tree Rotations
    10.11的一些题
    10.15 模拟赛
    bzoj 5329 战略游戏
    php面向对象基础(二)
    php面向对象基础(一)
    PHP基础-数组与数据结构
    php基础-字符串处理
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/4799474.html
Copyright © 2011-2022 走看看