Cod sursa(job #1795160)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 2 noiembrie 2016 01:08:00
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#define NMAX 16001
#define INF (1 << 30)

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");
int vol[NMAX], n, k;
int maxx;

int nr_k(int c)
{
    if(c < maxx)
        return INF;
    int cant = 0, nr = 0;
    for (int i = 1; i <= n; i++)
        if (cant + vol[i] <= c)
            cant += vol[i];
        else
        {
            nr++;
            cant = vol[i];
        }
    return nr + 1;
}

int binar(int x, int y)
{
    int m;
    while (x <= y)
    {
        m = x + (y - x) / 2;
        if (nr_k(m) <= k && nr_k(m-1) > k)
            return m;
        else
        {
            if (nr_k(m) > k)
                x = m + 1;
            else
                y = m - 1;
        }
    }
    return -1;
}

int main()
{
    int sum = 0;
    maxx = -1;
    in >> n >> k;
    for (int i = 1; i <= n; i++)
    {
        in >> vol[i];
        if (maxx < vol[i])
            maxx = vol[i];
        sum += vol[i];
    }
    in.close();
    out << binar(maxx, sum) << "\n";
    out.close();
    return 0;
}