Cod sursa(job #1509276)

Utilizator issuePop Daniel issue Data 23 octombrie 2015 17:30:28
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>

using namespace std;

#define numarMaximDeSaltele 16005

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

int numarDeSaltele, numarDeTransporturi;
int saltele[numarMaximDeSaltele];

int check(int x) {
    int i, storage = 0, transporturi = 0;
    for(i = 0; i < numarDeSaltele; i++){
        if(storage + saltele[i] < x){
            storage += saltele[i];
        } else{
            storage = 0;
            transporturi++;
        }
    }
    if(transporturi > numarDeTransporturi) return 0;
    return 1;

}

int main() {
    int i, volMax = 0, sumaVolume = 0;
    fin >> numarDeSaltele >> numarDeTransporturi;
    for(i = 0; i < numarDeSaltele; i++){
        fin >> saltele[i];
        if(saltele[i] > volMax) volMax = saltele[i];
        sumaVolume += saltele[i];
    }
    int stanga = volMax, dreapta = sumaVolume, mijloc;
    while(dreapta - stanga > 1){
        mijloc = (dreapta + stanga) / 2;
        if(check(mijloc)){
            dreapta = mijloc;
        } else {
            stanga = mijloc;
        }
        //cout << mijloc << endl;
    }
    fout << mijloc;
    fin.close();
    fout.close();
    return 0;
}