Cod sursa(job #2979501)

Utilizator catalinmarincatalinmarin catalinmarin Data 15 februarie 2023 11:25:12
Problema Transport Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[801], g[801], NrTransporturi, n, MarimeMinima = 0, MarimeMaxima = 0, mid;
int Incape(int MarimeCamion){
    int SumaSalteleInCamion = 0;
    int TransporturiTeoretice = 1;
    int j;
    for (j = 1; j <= n; j++){
        SumaSalteleInCamion += v[j];
        if (SumaSalteleInCamion > MarimeCamion){
            TransporturiTeoretice++;
            SumaSalteleInCamion = v[j];
        }
    }
    if (TransporturiTeoretice > NrTransporturi)
        return -1;
    else return 1;
}
int CautareBinaraPozitieCamion(int left, int right){
    int rezultat;
    while (left <= right) {
        mid = (left + right) / 2;
        if (Incape(mid) == -1) {
            left = mid + 1;
            rezultat = mid;
        } else if (Incape(mid) == 1) {
            right = mid - 1;
            rezultat = mid;
        }
    }
    return rezultat;
}
int main()
{
    int i, SfarsitVector, ElemVector, MarimeCamion;
    fin >> n >> NrTransporturi;
    for (i = 1; i <= n; i++) {
        fin >> v[i];
        if (v[i] > MarimeMinima)
            MarimeMinima = v[i];
        MarimeMaxima += v[i];
    }
    fout << CautareBinaraPozitieCamion(MarimeMinima, MarimeMaxima);
    return 0;
}