Loading

POJ-3104 Drying

Drying

有n件衣服和一个吹风筒,每件衣服有\(a_i\)的潮湿度,每次只能用吹风筒吹一件衣服,如果选择自然风化,则衣服的潮湿度-1,如果选择用吹风筒则潮湿度-k

问最快需要多久能将衣服全部吹干

二分

二分枚举答案,答案的可行性具有单调01分布

直接检查就行,因为使用吹风筒就没有了潮湿度-1,所以仅仅只能将吹风筒的效率换成k--

下界是1,上界是衣服潮湿度的最大值

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <functional>
#include <map>
#include <set>
#include <cmath>
#include <cstring>
#include <deque>
#include <stack>
using namespace std;
typedef long long ll;
#define pii pair<int, int>
const ll maxn = 2e5 + 10;
const ll inf = 1e17 + 10;
ll n, k;
ll num[maxn];

bool query(ll now)
{
    ll ans = 0;
    for(int i=0; i<n; i++)
        ans += (num[i] - min(now, num[i]) + k - 1) / k;
    return ans <= now;
}

int main()
{
    scanf("%lld", &n);
    ll l = 1, r = 0;
    for(int i=0; i<n; i++)
    {
        scanf("%lld", &num[i]);
        r = num[i] > r ? num[i] : r;
    }
    scanf("%lld", &k);
    if(k == 1)
    {
        printf("%lld\n", r);
        return 0;
    }
    k--;
    while(l < r)
    {
        ll mid = l + (r - l) / 2;
        if(query(mid))
            r = mid;
        else
            l = mid + 1;
    }
    printf("%lld\n", l);

    return 0;
}
posted @ 2022-04-25 18:17  dgsvygd  阅读(26)  评论(0编辑  收藏  举报