Pagini recente » Cod sursa (job #3156835) | Cod sursa (job #2223266) | Cod sursa (job #2161621) | Cod sursa (job #1148646) | Cod sursa (job #895109)
Cod sursa(job #895109)
#include <cstdio>
int N, K, a[16001], s;
inline int maxim(int x, int y) {
return (x<y)?y:x;
}
bool merge(int x) {
int nr = 1, k = 0;
for (int i = 1; i <= N; ++i) {
if (k + a[i] <= x) {
k += a[i];
} else if (a[i] > x) {
return false;
} else {
k = a[i];
++nr;
}
}
if (nr <= K) {
return true;
}
return false;
}
int cauta_binar(int st, int dr) {
int logN, lg, i;
for (logN = 1; logN <= dr; logN <<= 1);
for (i = dr, lg = logN; lg; lg >>= 1) {
if (i - lg > st-1 && merge(i-lg)) {
i -= lg;
}
}
return i;
}
int main() {
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d", &N, &K);
for (int i = 1; i <= N; ++i) {
scanf("%d", &a[i]);
s += a[i];
}
printf("%d\n", cauta_binar(s/K, s));
return 0;
}