Cod sursa(job #948244)

Utilizator mitrutstrutMitrea Andrei Ionut mitrutstrut Data 9 mai 2013 19:02:07
Problema Grupuri Scor 98
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#define MAX 100001
 
int a[MAX], n, k, min = 1000001;
 
int bin_search(int, int);
int test(int);
 
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];
        if(min > a[i] && i >= n-k)
        {
            min = a[i];
        }
    }
 
    printf("%d", bin_search(min, sum/k));
 
 
 
    return 0;
}
 
 
int bin_search(int st, int dr)
{
    int m;
    if(st>=dr)
    {
        if(test(st))
        {
            return st;
        }
        return st-1;
 
    }
    m = (st+dr)/2;
 
    if(test(m))
    {
        return bin_search(m+1, dr);
    }
    return bin_search(st, m);
}
 
 
int test(int nrg)
{
    int col = 0, lin = 0, i = 0;
 
    while(col < k)
    {
        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;
 
}