Форум » Обработка числовых последовательностей » №4212 (27.71) поправить решение » Ответить

№4212 (27.71) поправить решение

beep: Здравствуйте! Алгоритм в файле "27-71.py" выдает неверный ответ 99990 (правильный 99989 как на сайте). Это из-за того, что количество элементов в цепочке вычисляются неверно: [pre2]curLen = i - tail[r][1] + 1[/pre2] В i хранится индекс последнего члена общей суммы, в tail[r][1] хранится индекс последнего члена суммы с нужным остатком r. Чтобы узнать сколько членов между двумя индексами нужно из большего индекса вычесть меньший. Например, 7 - 4 = 3, три члена: 5, 6, 7. Единицу прибавлять ненужно. При этом в виде начального индекса заносится 0: [pre2]tail = [(0,0)] + [(None,0)]*(D-1)[/pre2] что неверно, потому что получается, что для последовательности без остатка нужно из суммы вычесть первый элемент, а его вычитать ненужно. Правильный способ вычислять количество элементов: [pre2]curLen = i - tail[r][1][/pre2] А начальное значение должно быть таким: [pre2]tail = [(0,-1)] + [(None,0)]*(D-1)[/pre2] Тогда даже если максимальная цепочка будет с нулевого (первого) элемента, то получится i - (-1) = i + 1 = длина массива с элементами.

Ответов - 2

beep: Либо можно изменить способ внесения индексов с [pre2]tail[r] = (total, i)[/pre2] на [pre2]tail[r] = (total, i + 1)[/pre2]

Поляков: Спасибо, решение исправлено.



полная версия страницы