Pagini recente » Cod sursa (job #301205) | Cod sursa (job #253180) | Cod sursa (job #2621530) | Cod sursa (job #1299606) | Cod sursa (job #2665407)
#include <stdio.h>
#include <stdlib.h>
#define N 16000
#define MAX 256000000 //16000^2
int sum[N + 1], k, n;
int is_good(int volume){
int ind = 1, transports = 0;
int start, end, mij;
while (transports < k && ind <= n){
start = ind; end = n;
while (end - start > 0){
mij = (start + end) / 2;
if (sum[mij] - sum[ind - 1] < volume) start = mij + 1;
else end = mij;
}
ind = start;
transports ++;
}
if (ind >= n) return 1;
return 0;
}
int main()
{
FILE *fin, *fout;
fin = fopen("transport.in", "r");
fout = fopen("transport.out", "w");
fscanf(fin, "%d%d", &n, &k);
int i, x;
for (i = 1; i <= n; i ++){
fscanf(fin, "%d", &x);
sum[i] = sum[i-1] + x;
}
int start = 1, end = MAX, mij;
while (end - start > 0){
mij = (start + end) / 2;
if (is_good(mij)) end = mij;
else start = mij + 1;
}
fprintf(fout, "%d", end);
return 0;
}