Pagini recente » Cod sursa (job #408122) | Cod sursa (job #670190) | Cod sursa (job #495082) | Cod sursa (job #631855) | Cod sursa (job #1509276)
#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;
}