PKU 3104 - Drying (思维 + 二分)
题意
有N个衣服,每一分钟可以选择一件衣服烘干,也可以自然干。问最少的时间。
思路
这题竟然也可以二分。
代码
int arr[MAXN], n, k;
bool Check(LL mid)
{
LL cnt = 0;
for (int i = 0; i < n; i++)
{
LL tmp;
if ((tmp = arr[i] - mid) > 0) cnt += (tmp+k-2) / (LL)(k-1);
if (cnt > mid) return false;
}
return true;
}
int main()
{
//ROP;
while (~scanf("%d", &n))
{
int maxValue = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
maxValue = max(maxValue, arr[i]);
}
scanf("%d", &k);
if (k == 1) { printf("%d\n", maxValue); continue; }
int l = 1, r = maxValue, mid, ans = r;
while (l <= r)
{
mid = MID(l, r);
if (Check(mid))
{
ans = mid;
r = mid-1;
}
else l = mid+1;
}
printf("%d\n", ans);
}
return 0;
}