import sys
def read_ints():
return list(map(int, sys.stdin.readline().split()))
def get_divisors(x):
divs = []
d = 1
while d * d <= x:
if x % d == 0:
divs.append(d)
if d * d != x:
divs.append(x // d)
d += 1
return divs
def can_width_k(a, n, k):
m = n - k + 1
if m <= 0:
return False
w = [0] * m
prev = 0
for i in range(n):
cur = a[i]
delta = cur - prev
prev = cur
if i < m:
add = w[i - k] if i - k >= 0 else 0
wi = delta + add
if wi < 0:
return False
w[i] = wi
else:
rem = w[i - k] if 0 <= i - k < m else 0
if delta + rem != 0:
return False
return True
def main():
data = sys.stdin.read().strip().split()
if not data:
return
it = iter(data)
n = int(next(it))
a = [int(next(it)) for _ in range(n)]
total = sum(a)
divs = get_divisors(total)
candidates = [k for k in divs if k <= n]
best = 1
for k in candidates:
if k > best and can_width_k(a, n, k):
best = k
print(best)
if __name__ == "__main__":
main()
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 | import sys def read_ints(): return list(map(int, sys.stdin.readline().split())) def get_divisors(x): divs = [] d = 1 while d * d <= x: if x % d == 0: divs.append(d) if d * d != x: divs.append(x // d) d += 1 return divs def can_width_k(a, n, k): m = n - k + 1 if m <= 0: return False w = [0] * m prev = 0 for i in range(n): cur = a[i] delta = cur - prev prev = cur if i < m: add = w[i - k] if i - k >= 0 else 0 wi = delta + add if wi < 0: return False w[i] = wi else: rem = w[i - k] if 0 <= i - k < m else 0 if delta + rem != 0: return False return True def main(): data = sys.stdin.read().strip().split() if not data: return it = iter(data) n = int(next(it)) a = [int(next(it)) for _ in range(n)] total = sum(a) divs = get_divisors(total) candidates = [k for k in divs if k <= n] best = 1 for k in candidates: if k > best and can_width_k(a, n, k): best = k print(best) if __name__ == "__main__": main() |
English