Cod sursa(job #990564)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 28 august 2013 17:26:34
Problema Grupuri Scor 8
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 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 log2, step;

    for ( log2 = 1; log2 < N; log2 <<= 1 );

    for ( step = st; log2; log2 >>= 1 )
            if ( step + log2 <= dr && valid( step + log2 ) )
                    step += log2;

    return step;
}

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

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

    g.close();
}

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

    return 0;
}