Pagini recente » Cod sursa (job #1452017) | Cod sursa (job #2757919) | Cod sursa (job #356332) | Cod sursa (job #1871014) | Cod sursa (job #2665434)
#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;
//int i;
while (transports < k && ind <= n){
start = ind; end = n;
if (volume == 16) printf("%d\n", ind);
while (end - start > 0){
mij = (start + end) / 2;
if (sum[mij] - sum[ind - 1] > volume) end = mij;
else start = mij + 1;
}
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;
}