Cod sursa(job #1504092)

Utilizator issuePop Daniel issue Data 17 octombrie 2015 12:14:45
Problema Transport Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>

using namespace std;

#define numarMaximDeSaltele 16002

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 1;
    return 0;

}

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 sirAux[numarMaximDeSaltele], k = volMax;
    sirAux[0] = volMax;
    sirAux[sumaVolume - volMax + 1] = sumaVolume;
    for(i = 1; i <= sumaVolume - volMax + 1; i++){
        sirAux[i] = k;
    }
    int stanga = 0, dreapta = sumaVolume - volMax + 1, mijloc;
    while(stanga - dreapta > 1){
        mijloc = dreapta / 2;
        if(check(sirAux[mijloc])){
            dreapta = mijloc;
        } else {
            stanga = mijloc;
        }
    }
    fout << sirAux[mijloc];
    fin.close();
    fout.close();
    return 0;
}