Cod sursa(job #2257043)

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

using namespace std;

int tester(int volume);
int binker(int left, int right, int x);

int N, K, Volume[16001];

int main()
{
    int maxSaltVolume;
    int left, right, middle, transport = 0;

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

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

    maxSaltVolume = Volume[0];
    for(int i = 1; i < N; i++)
        if(maxSaltVolume < Volume[i])
            maxSaltVolume = Volume[i];

    if(N <= K)
        cout << maxSaltVolume << '\n';
    else if(N > K){
        left = maxSaltVolume;
        right = 16000 * N;

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

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


    return 0;
}

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