Перепутанная заметка
Условие
Ты писал(а) список дел в телефоне, но автозамена вдруг решила показать слова с конца — последнее первым.
Помоги восстановить «перевёрнутую» запись: слова должны идти в обратном порядке.
Формат ввода
В первой строке записано целое число n — количество слов (1 ≤ n ≤ 500). Во второй строке записаны n слов, разделённых пробелами. Каждое слово состоит из строчных латинских букв и имеет длину от 1 до 20.
Формат вывода
Выведи те же n слов в обратном порядке, разделяя их одним пробелом.
Ограничения
- 1 ≤ n ≤ 500
- 1 ≤ длина слова ≤ 20
Пример
Ввод:
5
kupit hleb i moloko segodnya
Вывод:
segodnya moloko i hleb kupitКак решать — идея подхода
Приём: Разворот списка (reverse)
Ключевое наблюдение: менять внутри слов ничего не нужно — автозамена «перепутала» только порядок слов. Значит, задача сводится к операции над списком: взять те же элементы и пройти по ним с конца к началу.
Подходит приём «разворот массива/списка», потому что слова уже разделены пробелами, а вывести требуется ровно те же слова, только в обратной последовательности.
План решения:
- Прочитай n.
- Прочитай строку со словами и разбей её по пробелам в список
words. - Разверни список: либо сделай
words[::-1], либо вызовиwords.reverse(). - Выведи слова, соединённые одним пробелом:
' '.join(...).
Мини-сниппет идеи:
rev = words[::-1]print(' '.join(rev))
Сложность: O(n) по времени на разворот и сборку строки, память O(n) на список слов (n ≤ 500 — очень мало).
Частая ошибка: пытаться переворачивать строку целиком (получатся перевёрнутые буквы) или забыть, что reverse() меняет список на месте и возвращает None (нельзя писать words = words.reverse()).
Разберись руками
В заметке 5 слов: "kupit hleb i moloko segodnya". Автозамена показала их «с конца»: последнее слово должно стать первым, и так для всех слов.
- Возьми строку: "kupit hleb i moloko segodnya". Отметь ВСЕ позиции (индексы с 0), где стоит пробел. Это границы между словами.
- Теперь «переворачиваем» порядок слов руками. Старт: результат пустой []. Каждый шаг: берём последнее оставшееся слово и добавляем в результат. Предскажи состояние результата после каждого шага.
- Сколько пробелов будет в ответной строке, если 5 слов разделять ровно одним пробелом?
- Выбери, что нужно вывести для этого примера (слова в обратном порядке):
Идея: Сначала разбей строку на отдельные слова по пробелам. Потом возьми слова в обратном порядке (с последнего к первому) и склей их обратно одним пробелом между соседними словами.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- На программиста по олимпиаде: путь по классам — что даёт диплом, куда с ним берут на ИТ-направления и почему решает 9 класс
- Вердикты судьи: WA, TLE, RE, PE, CE — что значит каждый код проверяющей системы и где искать причину