Обращение к несуществующим значениям массива

Вводится n-ное количество положительных чисел. Среди них нужно выбрать два наибольших числа, сумма которых делится на m. Массив r должен хранить максимальные числа, имеющие соответствующий остаток от деления на m. Сам вопрос: после строки r = [0] * n нет никаких прямых назначений массиву, есть только обращения. получается что к какому бы индексу массива мы ни обратились бы, элемент под этим индексом будет равен нулю. Тогда как вообще работает условие r[m-p]>a? И почему именно под таким индексом идет обращение к массиву? Массив нулями заполнен, а мы к нему обращаемся.

m = 120

r = [0]*m

n = int(input())



left = 0
right = 0


for i in range(n):
 a = int(input())
 p = a % m

 if p == 0:
  if (r[0] > a) and (r[0]+a > left + right):
    left = r[0]
    right = a
 else:
  if (r[m-p] > a) and (r[m-p]+a>left+right):
   left = r[m-p]
   right = a

if a > r[p]:
 r[p] = a


print(left, right)


Ответы (1 шт):

Автор решения: MBo

Вот здесь в p-й элемент массива записывается максимальное число с остатком p по модулю m:

if a > r[p]:
 r[p] = a
→ Ссылка