Pagini recente » Cod sursa (job #1332517) | Cod sursa (job #1579640) | Cod sursa (job #177290) | Cod sursa (job #2234547) | Cod sursa (job #1404972)
#include <fstream>
#include <algorithm>
using namespace std;
#define inFile "transport.in"
#define outFile "transport.out"
#define MAX_N 16001
#define INF 1<<30
int volume[MAX_N];
int getPasses(int truckVolume, int n) {
int currVolume = 0, i, passes = 0;
for(i = 1; i <= n; i++) {
if(volume[i] > truckVolume)
return INF;
if(currVolume + volume[i] <= truckVolume)
currVolume += volume[i];
else
currVolume = volume[i], passes++;
}
return passes+1;
}
int main() {
ifstream in(inFile);
ofstream out(outFile);
int n, k, i, begSearch, midSearch, endSearch, lastFound, passes;
in >> n >> k;
for(i = 1; i <= n; i++)
in >> volume[i];
begSearch = 1;
endSearch = INF;
lastFound = -1;
while(begSearch <= endSearch) {
midSearch = (begSearch + endSearch) >> 1;
passes = getPasses(midSearch, n);
if(passes > k)
begSearch = midSearch + 1;
if(passes <= k) {
lastFound = midSearch;
endSearch = midSearch - 1;
}
}
out << lastFound << '\n';
return 0;
}