Cod sursa(job #1464387)

Utilizator NistorSergiuNistor Sergiu NistorSergiu Data 23 iulie 2015 12:27:14
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

#define NMAX 100001

using namespace std;

int a[NMAX];

bool possible(int nr, int n, int k)
{
    int completed = 0;
    for(int i = 0; i < n && k; i++)
    {
        if(a[i] < nr)
            completed += a[i];
        else
            completed += nr;
        if(completed >= nr)
        {
            k--;
            completed %= nr;
        }
    }
    if(k <= 0)
        return true;
    return false;
}

int searchForNr(int n, int k, int maxNr)
{
    int left = 0, right = maxNr, mid;
    while(left < right)
    {
        mid = (left + right + 1) / 2;
        if(possible(mid, n, k))
            left = mid;
        else
            right = mid - 1;
    }
    return left;
}

int main()
{
    int n, k;
    long long maxNr = 0;
    ifstream f("grupuri.in");
    f >> k >> n;
    for(int i = 0; i < n; i++)
    {
        f >> a[i];
        maxNr += a[i];
    }
    f.close();
    maxNr /= k;
    ofstream g("grupuri.out");
    g << searchForNr(n, k, maxNr) << '\n';
    g.close();
    return 0;
}