Pagini recente » Cod sursa (job #186653) | Cod sursa (job #889071) | Cod sursa (job #3003154) | Cod sursa (job #2583790) | Cod sursa (job #1504105)
#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[sumaVolume - volMax + 1] = sumaVolume;
for(i = 0; i < sumaVolume - volMax + 1; i++){
sirAux[i] = k;
k++;
}
// cout<<check(sirAux[7]);
int stanga = 0, dreapta = sumaVolume - volMax + 1, mijloc;
while(dreapta - stanga > 1){
mijloc = (dreapta + stanga) / 2;
// cout << sirAux[mijloc] << " ";
if(check(sirAux[mijloc])){
dreapta = mijloc;
} else {
stanga = mijloc;
}
}
fout << sirAux[mijloc];
fin.close();
fout.close();
return 0;
}