Pagini recente » Cod sursa (job #2481278) | Istoria paginii runda/simulare-cartita-45/clasament | Cod sursa (job #180444) | Cod sursa (job #1250562) | Cod sursa (job #2869298)
#include <stdio.h>
int verifica(int m, int n, int a[16001]) {
int t = 1, s = 0;
for (int i = 1; i <= n; i++) {
if (s + a[i] <= m)
s += a[i];
else
t++, s = a[i];
}
return t;
}
int main(void) {
int N, K, V, d = 0, s = 1, m, sol = 0;
int a[16001];
FILE* f = fopen("transport.in", "rt");
FILE* g = fopen("transport.out", "wt");
do {
fscanf(f, "%d %d", &N, &K); //nr de saltele
} while ((N < 1 || N > 16000) && (K < 1 || K > 16000));
for (int i = 0; i < N; i++) {
do {
fscanf(f, "%d", &V); //volumele saltelelor
} while (V < 1 || V > 16000);
a[i] = V;
d += V;
}
while (s <= d) {
m = (s + d) / 2;
if (verifica(m, N, a) <= K)
d = m - s, sol = m;
else
s = m + 1;
}
fprintf(g, "%d", sol);
fclose(f);
fclose(g);
return 0;
}