← Все вопросы
Как ускорить ввод в задачах, где много входных данных (sys.stdin)?
14
На контесте/в ЕГ-задаче читаю сотни тысяч строк через input() в цикле — и решение упирается в тайм-лимит, хотя алгоритм нормальный. Слышал, что input() медленный. Как читать быстрее?
3 ответа
21
✓ Принятый ответ — помог автору
Да, обычный input() медленный, когда строк очень много. Читай через sys.stdin:
import sys
input = sys.stdin.readline # переопределяем input на быстрый вариант
n = int(input())
for _ in range(n):
a, b = map(int, input().split())
...
Если надо проглотить вообще всё разом — data = sys.stdin.read().split() и дальше идёшь по списку индексом или через итератор. Вывод тоже ускоряют: копят строки в список и в конце один print('\n'.join(...)) или sys.stdout.write. Главное — не вызывать print в цикле миллион раз.
Михаил Боженко не забудь .strip() если сравниваешь строки — readline оставляет \n · 13 месяцев назад
alex zali переопределение input = sys.stdin.readline спасло на codeforces 🙏 · 13 месяцев назад
8
import sys и читай sys.stdin.readline() вместо input().
6
Ещё момент: конкатенация вывода через s += ... в цикле тоже тормозит. Собирай куски в список и склеивай join один раз.
Ваш ответ
Войдите, чтобы ответить на вопрос.