← Все вопросы

Как ускорить ввод в задачах, где много входных данных (sys.stdin)?

Задан 13 месяцев назад721 просмотров3 ответа
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 один раз.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект