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

№5266 (27.111) другое решение

beep: Здравствуйте! Чуть больше в духе динамического программирования, меньше возможности ошибиться и работает быстрее: [pre2] n = None k = None with open("27-111b.txt", "r") as f: n, k = map(int, f.readline().split()) for i, x in enumerate(f): data.append(int(x)) data = data + data s = 0 cash = {0 : -1} lMin = None for i, x in enumerate(data): s += x cash[s ] = i delta = s - k if delta in cash: p = cash[delta] else: continue if p >= n: break lT = i - p if lMin is None or lT < lMin: lMin = lT print(lMin) [/pre2]

Ответов - 3

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

beep: Поляков, прошу прощения, только сейчас заметил, что в самом начале решения не скопировал объявление и инициализацию списка: [pre2] data = [] n = None k = None with open("27-111b.txt", "r") as f: n, k = map(int, f.readline().split()) for i, x in enumerate(f): data.append(int(x)) data = data + data s = 0 cash = {0 : -1} lMin = None for i, x in enumerate(data): s += x cash[s ] = i delta = s - k if delta in cash: p = cash[delta] else: continue if p >= n: break lT = i - p if lMin is None or lT < lMin: lMin = lT print(lMin) [/pre2]

Поляков: :-) Спасибо. Я добавил, конечно. Привык запускать программы перед публикацией.




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