POJ 1064(二分搜索) :假定一个解并判断是否可行

#include 
#include <string>
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int N;
int K;
double L[100005];

bool isOk(double x){
    int num = 0;
    for(int i=1;i<=N;i++){
        num += int(L[i]/x);
    }
    return num >= K;
}

void solve(){
    scanf("%d%d",&N,&K);
    for(int i=1;i<=N;i++)
        cin >> L[i];
    double lb = 0;
    double ub = 100005;

    for(int i=0;i<100;i++){
        double mid = (lb+ub)/2;
        if(isOk(mid))
            lb = mid;
        else
            ub = mid;
    }
    printf("%.2f\n",floor(ub*100)/100);
    ///floor(参数 x) 返回不大于x的最大整数
}

int main() {
    solve();
    return 0;
}

 

你可能感兴趣的:(POJ 1064(二分搜索) :假定一个解并判断是否可行)