Cod sursa(job #40368)

Utilizator DastasIonescu Vlad Dastas Data 27 martie 2007 13:29:36
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

int n, k, a[16000];

int verif(int val)
{
    int cnt = 1;
    int sum = 0;

    int i = 0;
    while ( i < n )
    {
        sum += a[i];
        if ( sum > val )
        {
            sum = a[i];
            ++cnt;
        }

        if ( cnt > k )
            return 0;
        ++i;
    }

    return 1;
}

int main()
{
    in >> n >> k;
    int max = 0, s = 0;

    for ( int i = 0; i < n; ++i )
    {
        in >> a[i];
        s += a[i];
        if ( max < a[i] )
            max = a[i];
    }

    int sol = s;
    while ( max <= s )
    {
        int m = (max+s)>>1;
        if ( verif(m) )
            s = m-1, sol = m;
        else
            max = m+1;
    }

    out << sol << endl;

	return 0;
}