Я пишу следующий код, чтобы найти максимальный подмассив продукта:
def ans(arr, n):
M = 1000000007
cur_max = cur_min = ans = arr[0] % M
for i in range(1, n):
tmp = cur_max
cur_max = max(arr[i], cur_min * arr[i]% M, cur_max * arr[i] % M)
cur_min = min(arr[i], cur_min * arr[i] % M, tmp * arr[i] % M)
ans = max(ans, cur_max)
return ans % M
Когда я использую его в array = [6, -3, -10, 0, 2], я получаю ответ: 999999989
В то время как, когда я меняю его на
from math import *
def ans(arr, n):
M = 1000000007
cur_max = cur_min = ans = arr[0]
for i in range(1, n):
tmp = cur_max
cur_max = max(arr[i], int(fmod(cur_min * arr[i], M)), int(fmod(cur_max * arr[i], M)))
cur_min = min(arr[i], int(fmod(cur_min * arr[i], M)), int(fmod(tmp * arr[i], M)))
ans = max(ans, cur_max)
return ans
, я получаю ответ: 180
Единственное изменение, которое я сделал, - это использовать функцию fmod, а затем преобразовать ее в целые числа, а не использовать оператор mod (%). Почему я получаю совершенно разные ответы?