Cod sursa(job #2892027)

Utilizator ClaudiuChelceaClaudiuChelcea ClaudiuChelcea Data 20 aprilie 2022 14:15:13
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <limits.h>

void load (int& middle, int& n, int& path, int array[])
{
    path = 0;
    int sinc {0}, i {1};
    while (i <= n) {
        sinc = 0;
        while (sinc + array[i] <= middle) {
            sinc = sinc + array[i++];
        }
        path++;
    }
}
           
int main ()
{
    // Files
    std::ifstream fin;
    fin.open("transport.in");
	std::ofstream fout;
    fout.open("transport.out");

    // Variables
    int array[(1<<14)];
    int n {0}, k {0}, sum {0}, min {INT_MAX}, path {0}, max {0}, middle {0};
 
    // Read
    fin >> n >> k;    
    for (int i = 1; i <= n; ++i) {
        fin >> array[i];
        sum = sum + array[i];
        if (max < array[i]) {
            max = array[i];
        }
    }
    
    array[n+1] = INT_MAX;
        
    while (max < sum) {
        middle = (max + sum) / 2;
        load (middle, n, path, array);

        if (path <= k && min > middle) {
            min = middle;
        }
        
        if (path <= k && path > 1) {
            sum = middle;
        } else {
            max = middle + 1;
        }
    }
          
    fout << min;

    return 0;
}