Pagini recente » Cod sursa (job #443845) | Cod sursa (job #2034940) | Cod sursa (job #1428976) | Cod sursa (job #2953684) | Cod sursa (job #1817870)
#include <cstdio>
const int MAX_N = 16000;
const int INFINIT = 1000000000;
int v[MAX_N];
bool transport(int n, int cap, int k) {
int x, tr;
tr = 1;
x = 0;
for(int i = 0; i < n; ++i) {
x = x + v[i];
if(x > v[i]) {
tr++;
x = v[i];
}
}
if(tr > k)
return true;
return false;
}
int cautare(int st, int dr, int k, int n) {
int mid;
bool ok;
while(dr - st > 1) {
mid = (st + dr) / 2;
ok = transport(n, mid, k);
if(ok)
dr = mid;
else
st = mid;
}
return dr;
}
int main() {
int n, k, max;
FILE *fin = fopen("transport.in", "r");
fscanf(fin, "%d%d", &n, &k);
max = 0;
for(int i = 0; i < n; ++i) {
fscanf(fin, "%d", &v[i]);
if(v[i] > max)
max = v[i];
}
fclose(fin);
FILE *fout = fopen("transport.out", "w");
fprintf(fout, "%d", cautare(max, INFINIT, k, n));
fclose(fout);
return 0;
}