Форум » Обработка числовых последовательностей » №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]
Поляков: :-) Спасибо. Я добавил, конечно. Привык запускать программы перед публикацией.
полная версия страницы