POJ(3104)(Drying)

链接:https://vjudge.net/problem/POJ-3104#author=169074291

思路:二分法求解,注意有几个细节,最好是将烘干机人工看完每分钟掉水1和额外的每分钟掉水k-1,这样方便后面的计算,还有就是k=0的情况需要单独拿出来讨论,特别注意判断的时候返回true ub = mid,不要形成惯性思维。

代码:

#include
#include
using namespace std;

const int maxn = 1e5+1;
int n,k;
int a[maxn];

bool c(int d){
  unsigned long long int minute = 0;
    for(int i=0;i0){
            minute += (more+k-1)/k; //将可整除和不可整除两种情况合二为一
        }
        if(minute>d)return false;
    }
    return true;
}

bool cmp(int &a,int &b){
    return a>b;
}

int main(){
    while(scanf("%d",&n)!=EOF){
    for(int i=0;i1){
        int mid = (ub+lb)/2;
        if(c(mid))ub = mid;//一定注意true的时候到底是往哪边走
        else lb = mid;
    }
    printf("%d\n",ub);
    }
    }
        return 0;
}

你可能感兴趣的:(POJ(3104)(Drying))