Cod sursa(job #1549752)

Utilizator Moise_AndreiMoise Andrei Moise_Andrei Data 12 decembrie 2015 18:43:13
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <iostream>

using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int v[16005], n,k;
long long s;

int nr_transporturi(int c) {

    int nr = 1, cap = c;
    for(int i = 1 ; i <= n ; ++ i) {
        if(cap >= v[i]) {
            cap -= v[i];
        }
        else {
            nr++;
            cap = c - v[i];
        }
    }
    return nr;
}
int main()
{
    in>>n>>k;
    int maxim=-1;
    for(int i=1;i<=n;i++)
    {
        in>>v[i];
        s+=v[i];
        if(maxim < v[i])
            maxim = v[i];
    }
    /// nr_transporturi(x) - O(n)
    int st = maxim, dr = s, rasp = -1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        int aux = nr_transporturi(mij);
        if(aux <= k) {
            rasp = mij;
            dr = mij - 1;
        }
        else {
            st = mij + 1;
        }
    }
    out << rasp << '\n';
    return 0;
}