Cod sursa(job #607349)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 11 august 2011 18:27:38
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <cstdio>

#define NMax 16005
#define Inf 256000005

using namespace std;

int N, K, V[NMax], Minim, S;

void Read ()
{
    freopen ("transport.in", "r", stdin);
    scanf ("%d %d", &N, &K);
    for (int i=1; i<=N; ++i)
    {
        scanf ("%d", &V[i]);
        if (V[i]>Minim)
        {
            Minim=V[i];
        }
    }
}

void Print ()
{
    freopen ("transport.out", "w", stdout);
    printf ("%d\n", S);
}

bool Possible (int C)
{
    int CurrentV=0, CurrentK=0;
    for (int i=1; i<=N; ++i)
    {
        if (CurrentV+V[i]<=C)
        {
            CurrentV+=V[i];
        }
        else
        {
            CurrentV=V[i];
            ++CurrentK;
        }
    }
    if (CurrentV>0)
    {
        ++CurrentK;
    }
    if (CurrentK<=K)
    {
        return true;
    }
    return false;
}

int main()
{
    Read ();
    int L=Minim, R=Inf;
    while (L<=R)
    {
        int Mid=(L+R)/2;
        if (Possible (Mid))
        {
            S=Mid;
            R=Mid-1;
        }
        else
        {
            L=Mid+1;
        }
    }
    Print ();
    return 0;
}