Cod sursa(job #2256968)

Utilizator Salamandra01Felmeri Zsolt Salamandra01 Data 9 octombrie 2018 14:40:48
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

int tester(int volume, int V[], int n);

int main()
{
    int N, K, maxSaltVolume;
    int left, right, middle, transport = 0;
    int Volume[16000];

    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 && (left + 1) != right){
            middle = (left + right) / 2;
            transport = tester(middle, Volume, N);
            if(transport < K)
                right = middle;
            else if(transport > K)
                left = middle;
            else
                break;
        }
        cout << middle + 1 << '\n';
    }


    return 0;
}

int tester(int volume, int V[], int n)
{
    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;
}