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
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <bits/stdc++.h>

using namespace std;
#define pb push_back
#define st first
#define nd second
typedef long long ll;
typedef long double ld;
const ll I = 1'000'000'000'000'000'000LL;
const int II = 2'000'000'000;
const ll M = 1'000'000'007LL;
const int N = 1'000'007;
int tab[N], dod[N];

void Solve()
{
    int n; ll s = 0LL;
    cin >> n;
    for(int i = 1; i <= n; ++i)
        {cin >> tab[i]; s += (ll)tab[i];}
    int lim = n, a = 1, b = 1;
    while(a < n && tab[a + 1] >= tab[a])
        ++a;
    while(b < n && tab[n - b] >= tab[n - b + 1])
        ++b;
    if(a == b && a == n)
    {
        cout << n << "\n";
        return;
    }
    lim = min(min(a, b), n);
    vector<int> pos;
    for(int i = 2; i <= lim; ++i)
        if(s % (ll)i == 0LL)
            pos.pb(i);
    int ans = 1;
    for(int l = 0; l < (int)pos.size(); ++l)
    {
        int a = pos[l];
        int s = 0, czy = 1;
        for(int i = 1; i <= n; ++i)
            dod[i] = 0;
        for(int i = 1; i <= n; ++i)
        {
            s += dod[i];
            if(s > tab[i] || (s < tab[i] && n - i < a - 1))
            {czy = 0; break;}
            dod[i + a] = -(tab[i] - s);
            s = tab[i];
        }
        if(czy)
            ans = a;
    }
    cout << ans << "\n";
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    //int t; cin >> t;
    //while(t--)
        Solve();

    return 0;
}