Подготовка к олимпиадам: быстрый ввод-вывод
bufio: быстрый ввод-вывод и олимпиадный шаблон на Go.
fmt.Scan читает посимвольно и на больших данных безнадёжно медленный. Олимпиадный стандарт в Go — буферизованный ввод-вывод из пакета bufio:
• bufio.Reader + fmt.Fscan — быстрое чтение;
• bufio.Writer + fmt.Fprintln — быстрый вывод; в конце обязателен writer.Flush(), иначе буфер не будет напечатан (и вы получите Wrong Answer при правильном решении).
Go
Олимпиадный шаблон. Введите: 4, затем 10 20 30 40
Что важно в шаблоне:
• reader и writer объявлены на уровне пакета — доступны из любой функции;
• defer writer.Flush() гарантирует сброс буфера при выходе из main — писать эту строку первой стало ритуалом олимпиадников на Go;
• fmt.Fscan(reader, &x) — тот же Scan, но из быстрого буфера.
Checklist олимпиадника на Go:
1. Не забыт ли writer.Flush()? (defer решает это раз и навсегда)
2. int в Go 64-битный — переполнения int32 можно не бояться, но произведения трёх больших чисел всё равно проверяйте.
3. len(s) — байты; для кириллицы и юникода работайте через []rune.
4. Неиспользуемые переменные и импорты не скомпилируются — удаляйте.
Курс завершён — поздравляем!
Откройте раздел «Обучение» и начинайте «Путь олимпиадника» с Уровня 1: сложность алгоритмов, задачи на реализацию и базовая математика. Удачи на соревнованиях!