Pagini recente » Cod sursa (job #1046632) | Cod sursa (job #1356497) | Cod sursa (job #724572) | Cod sursa (job #1194986) | Cod sursa (job #1430289)
#include <iostream>
#include <fstream>
#define nmax 16001
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int v[nmax], maxCamion, sumaMomentana, kMomentan, minCamion, limitL, limitR, sMax, ok;
int main()
{
int n, k;
f >> n >> k;
for (int i = 1; i <= n; i++) {
f >> v[i];
if (minCamion < v[i]) minCamion = v[i];
sMax += v[i];
}
maxCamion = (sMax + minCamion) / 2;
limitL = minCamion;
limitR = sMax;
while (1) {
for (int i = 1; i <= n; i++) {
sumaMomentana += v[i];
if (sumaMomentana > maxCamion) {
kMomentan++;
sumaMomentana = v[i];
if (i == n) kMomentan++;
}
else if (i == n) kMomentan++;
}
if (kMomentan > k) {
limitL = maxCamion;
maxCamion = (limitL + limitR) / 2;
ok = 1;
}
if (kMomentan <= k) {
limitR = maxCamion;
maxCamion = (limitL + limitR) / 2;
ok = 0;
}
if (limitL + 1 == limitR) {
if (ok == 1) {
g << maxCamion;
return 0;
}
else {
g << maxCamion + 1;
return 0;
}
}
sumaMomentana = 0;
kMomentan = 0;
}
return 0;
}