其他分享
首页 > 其他分享> > 680. 剪绳子

680. 剪绳子

作者:互联网

680. 剪绳子
主要考查浮点数二分思想

#include <iostream>
using namespace std;

const int N = 100010;
int n, m;
int w[N];

bool check(double mid)
{
    int cnt = 0;
    //(w[i] / mid) 表示每段绳子可以裁剪mid长度的段数
    for(int i = 0; i < n; i++){
        cnt += (w[i] / mid);
    }
    return cnt >= m;
}

int main()
{
    cin >> n >> m;
    for(int i = 0; i < n; i++) cin >> w[i];
    
    double l = 0, r = 1e9;
    while(r - l > 1e-4)
    {
        double mid = (l + r) / 2;
        if(check(mid)) l = mid;  //如果mid可以裁剪出来  那么最长的长度肯定在右半段->[mid, r]
        else r = mid;  //否则在左半段  ->[l, mid]
    }
    printf("%.2f\n", r);
    return 0;
}

标签:cnt,return,int,double,绳子,mid,check,680
来源: https://blog.csdn.net/qq_45568443/article/details/112774044