Cod sursa(job #1322764)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 20 ianuarie 2015 13:17:48
Problema Grupuri Scor 74
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#define min(a,b) a > b ? b : a
#define MaxN 100013
using namespace std;

FILE *fin = freopen("grupuri.in","r",stdin);
FILE *fout = freopen("grupuri.out","w",stdout);

int n, k, nr;
int A[MaxN];


void Read()
{
    scanf("%d%d", &k, &n);
    for(int i = 1; i <= n ; ++i)
    {
        scanf("%d", &A[i]);
        nr += A[i];
    }
}

inline bool Check(int m)
{
    long long int s = 0;
    for(int i = 1; i <= n ; ++i)
        s += min( A[i], m );
    if( s >= m * k )
        return 1;
    return 0;
}

void Solve()
{
    int left = 0, right = nr / k + 1, m, sol = -1;

    while( left <= right )
    {
        m = (left + right) >> 1;
        if( Check(m) )
        {
            if(sol < m)
                sol = m;
            left = m + 1;
        }
        else
            right = m - 1;
    }
    printf("%d", sol);
}

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