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
import math

n = int(input())
segments = list(map(int, input().split()))
ilosc = sum(segments)
first = segments[0]
last = segments[-1]
k = 1
while first==0 and k<=n-1:
    first = segments[k]
    k+=1
h = n-2
while last==0 and h>=0:
    last = segments[h]
    h-=1
maxdlugosc = 1
while h>0 and k< n-1 and segments[h]>= last and segments[k]>= first:
    h-=1
    k+=1
    maxdlugosc +=1
maxdlugosc+=1
dzielnikiilosci = []
dlugoscfora = min(int(math.sqrt(ilosc)), maxdlugosc)
for i in range(1, dlugoscfora+1):
    if ilosc%i == 0:
        dzielnikiilosci.append(i)
for i in range(len(dzielnikiilosci)-1,-1,-1):
    if maxdlugosc>=(ilosc//dzielnikiilosci[i]):
        dzielnikiilosci.append(ilosc//dzielnikiilosci[i])
iloscdzielnikow = len(dzielnikiilosci)
res = 0
for index in range(iloscdzielnikow-1, -1 ,-1):
    konce = [0 for _ in range(len(segments)+1)]
    current = 0
    aktualny = dzielnikiilosci[index]
    i = 0
    flag = True
    while i<len(segments):
        current-=konce[i]
        if segments[i]>current:
            if i + aktualny > len(segments):
                flag = False
                break
            konce[i + aktualny] += (segments[i] - current)
            current += (segments[i]-current)
        if segments[i]<current:
            flag = False
            break
        i+=1
    if flag:
        res = aktualny
        break
print(res)