P7585 [COCI2012-2013#1] LJUBOMORA 题解

· · 题解

题目简述:

M 种不同颜色的弹珠,第 i 种颜色的弹珠有 x_i 个。现在要求将弹珠分成 N 份(全部用完),且每份颜色相同,并使得弹珠数量最多的那一份尽可能少(即嫉妒值最小)。

题目思路:

代码:

#include<bits/stdc++.h>
using namespace std;
int n, m, a[300005];
int check(int x)
{
    int tot = 0;
    for(int i = 1; i <= m; i++)
    {
        tot += a[i] / x;
        if(a[i] % x)//此时该种颜色的弹珠无法分完,剩下的还需要分给一个人
        {
            tot++;
        }
    }
    return tot <= n;
}
int main()
{
    ios::sync_with_stdio(false);//读入优化
    cin >> n >> m;
    int l = 0, r = -1, mid;
    for(int i = 1; i <= m; i++)
    {
        cin >> a[i];
        r = max(r, a[i]);
    }
    while(l < r)
    {
        mid = (l + r) / 2;
        if(check(mid))
        {
            r = mid;
        }
        else
        {
            l = mid + 1;
        }
    }
    cout << l;
    return 0;
}