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;
}