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)
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) |
English