Cod sursa(job #2658295)

Utilizator NanuGrancea Alexandru Nanu Data 13 octombrie 2020 17:19:16
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int v[16001], n, k, i;

bool secventa(int x) {
    int nrtrans = 0, s = 0;
    for(i = 1; i <= n; i++) {
        s += v[i];

        if(v[i] > x)    //daca gasim o saltea care nu incape;
            return 0;

        if(s > x) { //cand suma depaseste volumul crestem nr de transporturi si pastram salteaua actuala;
            s = v[i];
            nrtrans++;
        }
    }

    if(s > 0)   //daca mai avem saltele de carat
        nrtrans++;

    return (nrtrans <= k);
}

int CautareBinara() {
    int st = 1, dr = 300000000;
    while(st <= dr) {
        int mid = (st + dr) / 2;
        if(secventa(mid) == 1)  //caut cea mai din dreapta valoare
            dr = mid - 1;
        else st = mid + 1;
    }
    return st;
}

int main() {
    cin >> n >> k;
    for(i = 1; i <= n; i++)
        cin >> v[i];
    cout << CautareBinara();
    return 0;
}