二分与贪心-烘晾衣服(算法基础 第9周)

来源:互联网 发布:网络流行语的利与弊 编辑:程序博客网 时间:2024/05/01 09:18

讲解
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
源码

#include <stdio.h>#include <iostream>using namespace std;#define MAXN (100000+10)int n; //n件衣服int l, r, mid; //用于判定时间x,所考虑的左右及中值int k; //烘干机1分钟减少的水量int a[MAXN];//判断时间为ans是否可行bool check(int ans) {    int now=0; //需要烘干机的时间    for (int i=0; i<n; i++) {        if (a[i]>ans) {            now += (a[i]-ans-1)/(k-1) +1;            //第i件衣服需要烘干机的时间为(k-1)            if (now>ans) {                return false;            }        }    }    return true;}int main() {    scanf("%d", &n);    l=0; r=0;    for (int i=0; i<n; i++) {        scanf("%d", &a[i]);        if (a[i]>r) {            r=a[i];        }    }    scanf("%d", &k);    if (k==1) { //k=1,直接输出,避免除0的情况        printf("%d\n", r);    }    else { //二分答案,判断可行性        while(l <= r) {            mid = (l+r)/2;            if (check(mid)) {                r=mid-1;            }            else {                l = mid+1;            }        }        printf("%d\n", l);    }    return 0;}
0 0