Cod sursa(job #1023118)

Utilizator Teodor94Teodor Plop Teodor94 Data 6 noiembrie 2013 14:46:33
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define MAX_N 100000
#define LIMIT 100000000000
#define ll long long

int v[MAX_N];

void read( FILE *fin, int &k, int &n ) {
    fscanf( fin, "%d%d", &k, &n );
    for ( int i = 0; i < n; ++i )
        fscanf( fin, "%d", &v[i] );
}

bool check( ll ans, int k, int n ) {
    ll total = ( ll ) ans * k;
    for ( int i = 0; total > 0 && i <= n; ++i )
        total -= ( ll ) min( ( ll ) v[i], ans );
    return ( total <= 0 );
}

ll binary_search( int n, int k ) {
    ll i, pas = 1 << 30;
    for ( i = 0; pas; pas >>= 1 )
        if ( i + pas <= LIMIT && check( i + pas, n, k ) )
            i += pas;
    return i;
}

int main() {
    FILE *fin, *fout;

    fin = fopen( "grupuri.in", "r" );
    int n, k;
    read( fin, k, n );
    fclose( fin );

    fout = fopen( "grupuri.out", "w" );
    fprintf( fout, "%lld\n", binary_search( k, n ) );
    fclose( fout );
}