Pagini recente » Cod sursa (job #2381397) | Cod sursa (job #111707) | Cod sursa (job #1872608) | Cod sursa (job #1262985) | Cod sursa (job #1430292)
#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, intMaxCamion;
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;
intMaxCamion = (int) (limitL + limitR) / 2;
}
if (kMomentan <= k) {
limitR = maxCamion;
maxCamion = (limitL + limitR) / 2;
intMaxCamion = (int) (limitL + limitR) / 2;
}
if (limitL + 1 == limitR) {
if (intMaxCamion > maxCamion) g << limitL;
else g << limitR;
return 0;
}
sumaMomentana = 0;
kMomentan = 0;
}
return 0;
}