Cod sursa(job #2366612)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 4 martie 2019 21:11:46
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda simulare04032019 Marime 0.84 kb
#include <iostream>
#include <fstream>

const int MAXN =  16000 + 5;

using namespace std;

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

int n,k,v[MAXN];

bool ok(long long x){
    long long suma = 0;
    int numar_transporturi = 0;
    for(int i = 1; i <= n; i++){
        if(v[i] > x)
            return false;
        if(suma + v[i] > x){
            suma = 0;
            numar_transporturi++;
        }
        suma += v[i];
    }
    if(suma)
        numar_transporturi++;
    return (numar_transporturi <= k);
}
long long cautbin(){
    long long pas = 1LL<<60,r = 0;
    while(pas){
        if(!ok(r + pas))
            r += pas;
        pas /= 2;
    }
    return r + 1;
}

int main()
{
    in>>n>>k;
    for(int i = 1; i <= n; i++)
        in>>v[i];
    out<<cautbin();
    return 0;
}