Cod sursa(job #1521750)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 10 noiembrie 2015 20:07:47
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#define Nmax 16010

using namespace std;

int s, k, n, v[Nmax], c = Nmax*Nmax;

int ok(int maxCapacity)
{
    int nrTransporturi = 1, currentMass = 0;

    for(int i = 0; i < n; ++i)
    {
        if(v[i] > maxCapacity)
            return 0;
        if(currentMass + v[i] > maxCapacity)
        {
            ++nrTransporturi;
            currentMass = v[i];
        }
        else
        {
            currentMass+= v[i];
        }
        if(nrTransporturi > k)
            return 0;
    }
    return 1;
}

int solve(int st, int dr)
{
    if(st == dr)
        return st;
    int mij = (st + dr) / 2;
    if(ok(mij))
        return solve(st, mij);
    return solve(mij + 1, dr);
}

int main()
{
    fstream f("transport.in", ios::in);
    fstream g("transport.out", ios::out);
    f>>n>>k;
    for(int i = 0; i < n; ++i)
    {
        f>>v[i];
        s+= v[i];
    }


    g<<solve(s/k, s/k + Nmax);

    return 0;
}