Pagini recente » Cod sursa (job #1036031) | Cod sursa (job #2384564) | Cod sursa (job #1636664) | Cod sursa (job #708001) | Cod sursa (job #2004192)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int st[16001], n, nrDrum;//date de intrare
int capMin, capMax;//capacitatea minima este val maxima din stiva
//capacitatea maxima este suma
void citire(){
in >> n >> nrDrum;
for(int i = 1; i <= n; i++){
in >> st[i];
if(st[i] > capMin){
capMin = st[i];
}
capMax += st[i];
}
}
int nrTransporturi(int capacitate){
int nrTrans = 1, unTrans = 0;
for(int i = 1; i <= n; i++){
unTrans += st[i];
if(unTrans > capacitate){
nrTrans++;
unTrans = st[i];
}
}
return nrTrans;
}
int sol = 0;
void cautareBinara(int & st, int dr){
if(st <= dr && st >= capMin && dr <= capMax){
int mij = (st + dr) / 2;
int var = nrTransporturi(mij);
if(var > nrDrum){//capacitate prea mica, ma duc in dr
st = mij + 1;
}
else{//capacitate prea mare, ma duc in st
dr = mij - 1;
}
cautareBinara(st, dr);
}
}
void afisare(){
cautareBinara(capMin, capMax);
sol = capMin;
out << sol;
}
int main(){
citire();
afisare();
return 0;
}