Pagini recente » Cod sursa (job #2969957) | Cod sursa (job #1123544) | Cod sursa (job #427078) | Cod sursa (job #2854808) | Cod sursa (job #2144866)
#include <bits/stdc++.h>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
// Caut binar capacitatea camionului
// Pentru o cantitate mij la un moment dat, determin cate drumuri necesita sa faca camionul
// Daca numarul drumurilor <= k atunci capacitatea poate sa mai scada
// Altfel inseamna ca trebuie sa mai creasca
int CautaBinarCapacitate(const vector< int > &v, int n, int k, int maxVolumSaltea) {
int lo = maxVolumSaltea;
int hi = 16000 * 16000;
while(lo <= hi) {
int mid = (lo + hi) / 2;
int nr = 1;
int sumLeft = mid - v[0];
for(int i = 1; i < n; ++i) {
if(v[i] <= sumLeft) {
sumLeft -= v[i];
} else {
sumLeft = mid - v[i];
nr++;
}
}
if(nr <= k) {
hi = mid - 1;
} else {
lo = mid + 1;
}
}
return lo;
}
int main() {
int n, k; in >> n >> k;
vector< int > v(n);
int maxVolumSaltea = 0;
for(int i = 0; i < n; ++i) {
in >> v[i];
maxVolumSaltea = max(maxVolumSaltea, v[i]);
}
out << CautaBinarCapacitate(v, n, k, maxVolumSaltea) << '\n';
in.close(); out.close();
return 0;
}