Cod sursa(job #609402)

Utilizator SunsetGheoghe Multescu Sunset Data 21 august 2011 11:54:56
Problema Grupuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <stdio.h>
#define MAX 100000

int a[MAX], n, k;

// Din cate am vazut eu, lumea nu practica definirea functiilor la inceputul programului si
// implementarea lor dupa main. In general, functiile sunt declarate si implementate direct inainte
// de main. E o observatie de stil (deci nu e importanta), dar cred ca multa lume ar considera
// abordarea asta ciudata.
int bin_search(int, int);
int test(int);

int main()
{
    long long sum = 0;
		// warning: sol neinitializat
		// Daca compilatorul da erori ca anumite variabile sunt neinitializate, e bine sa-l asculti si
		// sa le initializezi cu ceva (chiar daca stii din restrictii ca variabila va primi o valoare).
    int i, m, st, dr, sol = 0;

    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];
    }

    st = a[n-k];
    dr = sum/k;

    while(st<=dr)
    {
        m = (st + dr)/2;

        if(test(m))
        {
            st = m+1;
            sol = m;
        }
        else
        {
            dr = m-1;
        }
    }

    printf("%d", sol);

    return 0;
}

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

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

        if(a[i] >= nrg)
        {
            col += n-i;
            if(col >= k)
            {
                return 1;
            }
            return 0;
        }
        else
        {
					lin += a[i];
					if (lin >= nrg) {
						++col;
						lin -= nrg;
					}
//            col = col + (lin + a[i]) / nrg;
//            lin = (lin + a[i]) % nrg;
        }

        i++;
    }

    return 1;

}