Cod sursa(job #482191)

Utilizator CossAlbulescu Cosmina Coss Data 2 septembrie 2010 19:28:30
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
using namespace std;

long long v[16001];
int n, K, i, j, k;
long long st, dr, mijl;
int Min = 160000001;

int verificare ()
{
    int grupe = 0, cap = 0;
    i = 1;

    while (i <= n)
    {
        while (cap + v[i] <= mijl)
        {
            cap += v[i];
            i ++;
        }
        cap = 0;
        grupe ++;
    }

    if (grupe <= K)
        return 1;
    else
        return 0;
}

int main ()
{
    FILE *f = fopen ("transport.in","r");
    FILE *g = fopen ("transport.out","w");
    fscanf (f,"%d %d", &n, &K);
    for (i=1; i<=n; ++i)
    {
        fscanf (f,"%lld", &v[i]);
        if (v[i] > st)
            st = v[i];
        dr += v[i];
    }

    while (st <= dr)
    {
        mijl = (st + dr) / 2;
        if (verificare ())
        {
            if (mijl < Min)
                Min = mijl;
            dr = mijl - 1;
        }
        else if (mijl < Min)
            st = mijl + 1;
    }

    fprintf (g, "%lld\n", mijl);

    fclose (g);
    fclose (f);
    return 0;
}