Pagini recente » Cod sursa (job #2975828) | Cod sursa (job #1997251) | Cod sursa (job #2561461) | Cod sursa (job #1823439) | Cod sursa (job #651309)
Cod sursa(job #651309)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define FISIN "transport.in"
#define FISOUT "transport.out"
#define MAXN 16000
int n, k;
int vol[MAXN];
int count(int cap) {
int so_far = 0, left = 0;
for (int i = 0; i < n; ++i) {
if (vol[i] <= left) {
left -= vol[i];
continue;
}
left = cap - vol[i];
++so_far;
if (so_far > k) break;
}
return so_far;
}
int main() {
FILE *fin = fopen(FISIN, "rt");
FILE *fout = fopen(FISOUT, "wt");
fscanf(fin, "%d %d", &n, &k);
for (int i = 0; i < n; ++i)
fscanf(fin, "%d", vol +i);
int st = 1, en = 16000 * 16000, mid = 0;
for (;;) {
mid = (st + en) / 2;
bool ok = (count(mid) <= k);
if (!ok) {
st = mid + 1;
continue;
}
ok = (count(mid - 1) <= k);
if (!ok) break;
en = mid - 1;
}
fprintf(fout, "%d\n", mid);
fclose(fout);
fclose(fin);
return 0;
}