Автор | Сообщение |
|
Отправлено: 21.08.22 14:44. Заголовок: №5266 (27.111) другое решение
Здравствуйте! Чуть больше в духе динамического программирования, меньше возможности ошибиться и работает быстрее: 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)
|
|
|
Ответов - 3
[только новые]
|
|
|
| Администратор
|
Сообщение: 3674
|
|
Отправлено: 30.08.22 16:38. Заголовок: Спасибо, решение доб..
Спасибо, решение добавлено.
|
|
|
|
Отправлено: 30.08.22 16:50. Заголовок: Поляков, прошу проще..
Поляков, прошу прощения, только сейчас заметил, что в самом начале решения не скопировал объявление и инициализацию списка: 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)
|
|
|
|
| Администратор
|
Сообщение: 3675
|
|
Отправлено: 30.08.22 18:05. Заголовок: :-) Спасибо. Я добав..
:-) Спасибо. Я добавил, конечно. Привык запускать программы перед публикацией.
|
|
|
|