Cod sursa(job #605096)

Utilizator vlad2901Vlad Berindei vlad2901 Data 26 iulie 2011 18:50:36
Problema Grupuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#define MAX 100001

int a[MAX], n, k;

long long bin_search(long long, long long);
long long test(long long);

int main()
{
    long long sum = 0;
    int i;

    freopen("grupuri.in", "r", stdin);
    freopen("grupuri.out", "w", stdout);

    scanf("%d %d", &k, &n);

    for(i=0;i<n;++i)
    {
        scanf("%d", &a[i]);
        sum += a[i];
    }

    printf("%lld", bin_search(1, sum/k));



    return 0;
}


long long bin_search(long long st, long long dr)
{
    int m;
    if(st>=dr) return st;

    m = (st+dr)/2;

    if(test(m))
    {
        return bin_search(m+1, dr);
    }
    return bin_search(st, m);
}


long long test(long long nrg)
{
    int col = 0, lin = 0, i = 0;

    while(col < nrg)
    {
        if(i == n)
        {
            return 0;
        }

        if(a[i] >= nrg)
        {
            col++;
        }
        else
        {
            col = col + (lin + a[i]) / nrg;
            lin = (lin + a[i]) % nrg;
        }

        i++;
    }

    return 1;

}