Pagini recente » Cod sursa (job #2831615) | Cod sursa (job #1803897) | Cod sursa (job #3292603) | Cod sursa (job #2602598) | Cod sursa (job #2955230)
#include <iostream>
using namespace std;
FILE *in = fopen("transport.in", "r"), *out = fopen("transport.out", "w");
int N, K, s[16005], maxS = 0, sumS = 0;
void _read() {
fscanf(in, "%d %d", &N, &K);
for (int i = 1; i <= N; ++i) {
fscanf(in, "%d", &s[i]);
maxS = max(maxS, s[i]);
sumS += s[i];
}
}
int nr_of_transports(int C) {
int res = 0, truck = 0;
for(int i = 1; i <= N; ++i){
if (truck + s[i] <= C)
truck += s[i];
else {
++res;
truck = s[i];
}
}
if (truck > 0)
++res;
return res;
}
int BS(int L, int R) {
int M, valM;
while (L <= R) {
M = (L + R) / 2;
valM = nr_of_transports(M);
if (valM < K)
R = M - 1;
else if (valM > K)
L = M + 1;
else {
while (M - 1 >= L && nr_of_transports(M - 1) == K)
--M;
return M;
}
}
return L;
}
int main()
{
_read();
int C = BS(maxS, sumS);
fprintf(out, "%d", C);
return 0;
}