Pagini recente » Cod sursa (job #2872604) | Cod sursa (job #1830900) | Cod sursa (job #3267871) | Cod sursa (job #2210535) | Cod sursa (job #1430291)
#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 << limitL;
return 0;
}
else {
g << limitR;
return 0;
}
}
sumaMomentana = 0;
kMomentan = 0;
}
return 0;
}