Cod sursa(job #990557)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 28 august 2013 17:19:41
Problema Grupuri Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>

using namespace std;

#define Nmax 100001

int cap[Nmax];

long long N, S, K;

void read()
{
    ifstream f("grupuri.in");

    f >> K >> N;

    for ( int i = 1; i <= N; ++i )
            f >> cap[i],
            S += cap[i];

    f.close();
}

bool valid( long long nr_grupuri )
{
    long long sum = 0;

    for ( int i = 1; i <= N; ++i )
            sum += min( 1LL * cap[i], nr_grupuri );

    return ( sum >= nr_grupuri * K * 1LL );
}

long long cautare_binara( long long st, long long dr )
{
    long long gasit = -1;
    long long m;

    while( dr - st > 1 )
    {
        m = st + ( dr - st ) / 2;

        if ( valid( m ) )
        {
            gasit = m;
            st = m + 1;
        }
        else
            dr = m - 1;
    }

    return gasit;
}

void print()
{
    ofstream g("grupuri.out");

    g << cautare_binara( 1, S ) << "\n";

    g.close();
}

int main()
{
    read();
    print();

    return 0;
}