Pagini recente » Cod sursa (job #3236651) | Cod sursa (job #1660317) | Cod sursa (job #2857596) | Cod sursa (job #2171178) | Cod sursa (job #410952)
Cod sursa(job #410952)
#include <stdio.h>
#include <string.h>
#define MAX_N 100001
char s[8 * MAX_N], *p;
int n, m, poz, v;
int A[MAX_N];
long long k, st, dr, mid, sol;
inline int read_value() {
int ret = 0;
while ('0' <= *p && *p <= '9')
ret = ret * 10 + *(p++) - '0';
p++;
return ret;
}
int main() {
freopen("grupuri.in", "r", stdin);
freopen("grupuri.out", "w", stdout);
scanf("%d %d\n", &m, &n);
fgets(s, sizeof(s), stdin); p = s;
for (int i = 1; i <= n; i++) {
A[i] = read_value();
dr += A[i];
}
st = 0; dr = dr / m + 1; mid = 0;
while (st + 1 < dr) {
mid = (st + dr) / 2;
poz = 1; k = 0;
for (int i = 1; i <= n; i++)
if (k < mid) {
v = A[i];
long long d = mid - k;
if (d <= v) {
k = mid; v -= d;
if (++poz > m) break;
k = (v < mid - d) ? v : mid - d;
}
else k += v;
}
if (poz >= m && k == mid) {
sol = (sol > mid) ? sol : mid;
st = mid;
}
else dr = mid;
}
printf("%lld\n", sol);
return 0;
}