Cod sursa(job #966113)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 25 iunie 2013 13:16:45
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>

using namespace std;

int n, k, result;
long long a[100010];
long long sum;

inline void Read()
{
    ifstream f ("grupuri.in");
    f>>k>>n;
    int i;
    for (i=1; i<=n; i++)
    {
        f>>a[i];
        sum += a[i];
    }
    f.close();
}

inline bool Possible(long long nrgrupuri)
{
    long long S, nranimale = 0LL;
    S = nrgrupuri * k;
    for (int i=1; i<=n; i++)
        nranimale += min(a[i], nrgrupuri);
    if (nranimale >= S)
        return true;
    return false;
}

inline void Solve()
{
    int st;
    long long mij, dr;
    st = 1;
    dr = sum / k;
    while (st <= dr)
    {
        mij = (st + dr) >> 1;
        if (Possible(mij))
        {
            result = mij;
            st = mij + 1;
        }
        else
            dr = mij - 1;
    }
}

inline void Write()
{
    ofstream g("grupuri.out");
    g<<result<<"\n";
    g.close();
}

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}