Cod sursa(job #1028119)

Utilizator mucenic_b101Bogdan Mucenic mucenic_b101 Data 13 noiembrie 2013 17:42:07
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>

int v[100001], n, k;

bool sepoate( long long mijl, long long save ) {
    long long csave = save;
    for(int  i = 0 ; i < k ; ++i )
        if( v[i] < mijl ) {
            csave -= ( mijl - v[i] );
            if( csave < 0 )
                return false;
        }
    return true;
}

long long cauta( int start, long long stop, long long save ) {
    long long mijl = ( start + stop ) / 2;
    if( start == stop || start == stop - 1 ) {
        if( sepoate( stop, save ) == true )
            return stop;
        return start;
    }

    if( sepoate( mijl, save ) )
        return cauta( mijl, stop, save );

    return cauta( start, mijl, save );
}


int main () {

    FILE *f, *g;
    f = fopen( "grupuri.in", "r" );
    g = fopen( "grupuri.out", "w" );

    long long suma = 0, save = 0;

    fscanf( f, "%d%d", &k, &n );

    for( int i = n - 1 ; i >= 0 ; --i ) {
        fscanf( f, "%d", &v[i] );
        suma += v[i];
        if( i >= k )
            save += v[i];
    }

    fprintf( g, "%lld\n", cauta( 0, suma / k + 1, save ) );

    fclose( f );
    fclose( g );

    return 0;

}