Cod sursa(job #2784795)

Utilizator lolismekAlex Jerpelea lolismek Data 17 octombrie 2021 13:26:18
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

const int N = 16001;
int v[N];

bool verificare(int capacitate, int n, int k){
    int i, transporturi = 0, sum_transport;
    i = 0;
    while(i < n){
        sum_transport = 0;
        while(sum_transport < capacitate && i < n){
            sum_transport += v[i];
            i++;
        }
        if(sum_transport > capacitate) i--;
        transporturi++;
    }
    if(transporturi <= k)
        return true;
    else
        return false;
}

int main()
{
    int n, k, i, maxim, sum_total, st, dr, mij, rasp;
    fin >> n >> k;
    sum_total = 0;
    maxim = -1;
    for(i = 0; i < n; i++){
        fin >> v[i];
        sum_total += v[i];
        if(v[i] > maxim)
            maxim = v[i];
    }

    /// facem cautarea binara de la maximul din vector ca altfel rezulta ciclu infinit in verificare
    st = maxim;
    dr = sum_total + 1;
    while(dr - st > 1){
        mij = (dr + st) / 2;
        if(verificare(mij, n, k) == 1){
            rasp = mij;
            dr = mij;
        }else{
            st = mij;
        }
    }
    fout << dr;
    return 0;
}