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
#include <bits/stdc++.h>
using namespace std;
#define rep(a, b) for (int a = 0; a < (b); a++)
#define rep1(a, b) for (int a = 1; a <= (b); a++)
#define all(x) (x).begin(), (x).end()
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int MOD = 1e9 + 7;

const int LIM = 1e5 + 7;
const int MAX = 1e6 + 7;

int n;
int nums[LIM];

int sub[LIM];
bool ok(int k) {
    rep(i, n+1) sub[i] = 0;

    int tot = 0;
    rep(i, n) {
        tot -= sub[i];
        if (tot > nums[i]) return false;
        if (i+k <= n) {
            sub[i+k] = nums[i]-tot;
            tot = nums[i];
        } else if (tot != nums[i]) return false;
    }
    return tot == sub[n];
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    
    cin >> n;
    rep(i, n) cin >> nums[i];

    ll sum = 0;
    rep(i, n) sum += nums[i];

    int ceilsqrt = sqrt(sum)+1;
    for (int d = 1; d <= ceilsqrt; d++) if (sum%d == 0 && sum/d <= n && ok(sum/d)) {
        cout << sum/d << "\n";
        return 0;
    }
    for (int d = ceilsqrt; d >= 1; d--) if (sum%d == 0 && d <= n && ok(d)) {
        cout << d << "\n";
        return 0;
    } 

    return 0;
}