Робот в арене: где он остановится?
Условие
В игре есть прямоугольная арена из клеток размером N×M. Робот начинает в клетке (r, c). Дальше игра проигрывает строку команд из букв U, D, L, R.
Робот пытается выполнить команды по очереди:
U— на клетку выше (r уменьшается на 1),D— на клетку ниже (r увеличивается на 1),L— на клетку левее (c уменьшается на 1),R— на клетку правее (c увеличивается на 1).
Если команда уводит робота за границу арены, робот остаётся на месте и переходит к следующей команде.
Нужно узнать, в какой клетке робот окажется после всех команд.
Формат ввода
В первой строке записаны два целых числа N и M — размеры арены. Во второй строке записаны два целых числа r и c — стартовая позиция робота (строка и столбец). В третьей строке записана строка S из символов U, D, L, R.
Формат вывода
Выведите два числа — конечные r и c.
Ограничения
1 ≤ N, M ≤ 10^91 ≤ r ≤ N,1 ≤ c ≤ M1 ≤ |S| ≤ 2000
Пример
Ввод:
3 4
2 2
UURRDDL
Вывод:
3 3Как решать — идея подхода
Приём: Пошаговая симуляция с проверкой границ
Ключевое наблюдение: команда влияет только на текущую позицию робота, а поле огромным быть не мешает — нам не нужно хранить N×M клеток, достаточно держать две координаты (r, c). Поэтому решение — простая симуляция (прогон команд) с проверкой «влезли ли в границы».
Почему это работает: правила говорят, что если шаг выводит за арену, позиция не меняется. Значит, для каждой буквы мы можем вычислить «кандидат» (nr, nc) и либо принять его, либо отбросить.
План:
- Считай N, M, стартовые r, c и строку S.
- Для каждого символа ch из S:
- Заведи nr = r, nc = c.
- Измени nr/nc по направлению (U: nr-1, D: nr+1, L: nc-1, R: nc+1).
- Если
1 <= nr <= Nи1 <= nc <= M, присвойr = nr,c = nc, иначе оставь как было. - Выведи r и c.
Мини-сниппет проверки: if 1 <= nr <= N and 1 <= nc <= M: r, c = nr, nc
Сложность: O(|S|) по времени (до 2000 шагов) и O(1) по памяти.
Частая ошибка: перепутать строки и столбцы (U/D меняют r, L/R меняют c) или забыть, что индексация 1..N и 1..M, а не 0..N-1.
Разберись руками
Арена 3×4 (строки 1..3, столбцы 1..4). Робот стартует в клетке (2, 2) и выполняет команды строки UURRDDL по очереди. Если шаг ведёт за границу, робот остаётся в той же клетке.
- Команда ведёт робота за границу (например, из строки 1 вверх). Что делаем?
- Проиграй команды U U R R D D L. После КАЖДОЙ команды запиши новую позицию (r c). Арена: r=1..3, c=1..4. Старт: 2 2.
- Какие два числа нужно вывести (финальная клетка) для этого примера?
Идея: Идём по командам по одной: пробуем сдвинуться на 1 клетку в нужную сторону, проверяем границы арены, и либо принимаем ход, либо оставляем позицию как была. После последней команды выводим текущие координаты.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- БВИ по олимпиадам: в какие вузы берут — правила приёма вузов, разобранные построчно, со ссылкой на приказ у каждой строки
- Перечневые олимпиады: что это и что дают — весь перечень Минобрнауки: уровни, срок диплома, разрезы по предметам и классам