// Author: Bartek Knapik
#include <cstdio>
const int MAXN = 100000+9;
long long a[MAXN], w[MAXN], s, ans;
int n;
bool check(int wl)
{
for (int i = 0; i < n + 1; ++i)
w[i] = 0LL;
long long cur = 0LL;
for (int i = 0; i < n; ++i)
{
cur += w[i];
if (a[i] == cur)
continue;
if ((a[i] < cur) || (i > n - wl))
return false;
w[i + wl] = cur - a[i];
cur = a[i];
}
return true;
}
int main()
{
scanf("%d", &n);
s = 0LL;
for (int i = 0; i < n; ++i)
{
scanf("%lld", &a[i]);
s += a[i];
}
ans = 0LL;
for (int wl = n; wl > 0 && ans == 0LL; --wl)
{
if (s % wl)
continue;
if (check(wl))
ans = wl;
}
printf("%lld\n", ans);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | // Author: Bartek Knapik #include <cstdio> const int MAXN = 100000+9; long long a[MAXN], w[MAXN], s, ans; int n; bool check(int wl) { for (int i = 0; i < n + 1; ++i) w[i] = 0LL; long long cur = 0LL; for (int i = 0; i < n; ++i) { cur += w[i]; if (a[i] == cur) continue; if ((a[i] < cur) || (i > n - wl)) return false; w[i + wl] = cur - a[i]; cur = a[i]; } return true; } int main() { scanf("%d", &n); s = 0LL; for (int i = 0; i < n; ++i) { scanf("%lld", &a[i]); s += a[i]; } ans = 0LL; for (int wl = n; wl > 0 && ans == 0LL; --wl) { if (s % wl) continue; if (check(wl)) ans = wl; } printf("%lld\n", ans); return 0; } |
English