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

№5315 (27.119) ошибка в решении

beep: Здравствуйте. Во втором решении в файле "27-119_shastin.py" есть ошибка в вычислении индексов: [pre2] for i in range(K//2, N - K//2): if p[i + K//2][1] - p[i - 1 - K//2][1]: s1 = p[i + K//2][0] - p[i ][0] s2 = p[i - 1][0] - p[i - 1 - K//2][0] if i - 1 - K//2 else p[i - 1][0] count += (s1 == s2) [/pre2] Для следующего файла ответ будет 0, хотя правильный 1: [pre2] 5 5 1 2 0 2 1 [/pre2] Происходит это из-за того, что в следующих местах индексы вычисляются неверно: [pre2] if p[i + K//2][1] - p[i - 1 - K//2][1]: [/pre2] При i == K//2 для "хвоста" суммы мы получим следующий индекс: K//2 - 1 - K//2 = -1, т.е. в самой первой итерации цикла мы попадем в последний элемент p, хотя нам на этой итерации ничего не нужно вычитать из счетчика нулей. Избежать этого можно с помощью пустого элемента в начале массива p (p = [(0, 0)]). [pre2] s2 = p[i - 1][0] - p[i - 1 - K//2][0] if i - 1 - K//2 else p[i - 1][0] [/pre2] Во-первых, отрицательное число в условии воспринимается как True. Поэтому при i = K//2 условие "if -1" будет True и мы вычтем опять сумму из конца массива p. Во-вторых, при i = K//2 + 1 мы получим "if 0" и s2 будет вычисляться как "p[i - 1][0]" т.е. как "p[K//2][0]", что тоже неправильно, поскольку на этом шаге уже нужно вычитать сумму на нулевом элементе.

Ответов - 1

Leoshast2601: Здравствуйте! Спасибо, заменим решение.



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