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

Powered by Jekyll and Theme by solid