Cod sursa(job #2257030)

Utilizator Salamandra01Felmeri Zsolt Salamandra01 Data 9 octombrie 2018 16:10:12
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

int tester(int volume, int V[]);
int binker(int left, int right, int x);

int N, K;

int main()
{
    int maxSaltVolume;
    int left, right, middle, transport = 0, ok;
    int Volume[16001];

    freopen("transport.in", "rt", stdin);
    //freopen("transport.out", "wt", stdout);
    cin >> N >> K;

    for(int i = 0; i < N; i++)
        cin >> Volume[i];

    if(N <= K){
        maxSaltVolume = Volume[0];
        for(int i = 1; i < N; i++)
            if(maxSaltVolume < Volume[i])
                maxSaltVolume = Volume[i];
        cout << maxSaltVolume << '\n';
    }
    else if(N > K){
        left = 1;
        right = 16000 * N;

        while(left != right){
            middle = (left + right) / 2;
            transport = tester(middle, Volume);

            if(transport <= K)
                right = middle;
            else{
                ok = middle;
                left = middle + 1;
            }
        }
        cout << ok + 1 << '\n';
    }


    return 0;
}

int tester(int volume, int V[])
{
    int transport = 0, salt = 0;
    for(int i = 0; i < N; i++){
        if(salt + V[i] > volume){
            transport++;
            salt = V[i];
        }
        else
            salt += V[i];
    }
    return transport + 1;
}