Задание №168132: Задание 3
Задача 3. Путь зигзагом Имя входного файла: стандартный ввод Имя выходного файла: стандартный вывод Ограничение по времени: 1 секунда Ограничение по памяти: 256 мегабайт На бесконечном поле в точке с координатами (0;0) стоит робот. Ему нужно попасть в точку с координатами (a;b). За один шаг робот может сдвинуться на единицу вверх, вниз, влево или вправо. Из-за особенностей конструкции робот может ходить только «зигзагом» — то есть, если предыдущий шаг был по горизонтали, то следующий должен быть по вертикали, и наоборот. Постройте кратчайший путь робота от начальной точки до конечной. Формат входных данных Вводятся два целых числа a и b, каждое в отдельной строке (0 6 a;b 6 1000, a + b > 0). Формат выходных данных Выведите координаты робота после каждого шага. Каждая пара координат выводится в отдельной строке через пробел. Начальные координаты выводить не надо. Если есть несколько верных ответов, выведите любой. Система оценки Решения, правильно работающие при a 6 5 и b 6 5, будут оцениваться в 40 баллов. Пример стандартный ввод стандартный вывод 1 1 0 3 1 1 0 1 0 2 1 2 1 3 Замечание Иллюстрация к примеру: Страница 3 из 6 Пригласительный этап всероcсийской олимпиады по информатике для 8–10 классов 29-30 мая 2025
Что проверяет это задание
Задание относится к теме «Задание 3» и рассчитано на уровень 8 класса. Для решения понадобятся:
- анализ условия
- пошаговое рассуждение
- проверка результата
Источник: ВсОШ в Москве — официальный архив · 2025
Качество материала
Показываем, из чего состоит страница и можно ли проверить материал по первоисточнику.
Последняя проверка решения:
Происхождение задания
- Банк заданий
- ВсОШ в Москве — официальный архив
- Организатор
- Редакция «Я сам решу»
- Год материала
- 2025
- Материалы
- 2 файла
Связанные понятия
План самостоятельного решения
- Перепишите известные данные и отдельно сформулируйте, что требуется найти или доказать.
- Свяжите условие с темой «Задание 3» и выберите подходящее правило, формулу или способ рассуждения.
- Запишите промежуточные шаги: это помогает заметить потерянный знак, случай или логический переход.
- Сверьте результат со всеми ограничениями условия и только затем откройте подробный разбор.
Ориентировочное время: 15 минут.
Закрепить тему
После разбора попробуйте решить ещё десять заданий по предмету «Искусственный интеллект». Вариант формируется заново, а ответы можно сразу проверить.
Решение по шагам
Задача 3. Путь зигзагом
Будем увеличивать координаты чередуя их, пока не придём в нужную точку (x = a, y = b).
Если же одна координата уже приняла необходимое значение, а её нужно изменить, уменьшим её
на 1, потом она снова увеличится на 1, то есть эта координата будет меняться вблизи нужного нам
значения: a, a (cid:0) 1, a, a (cid:0) 1 и т.д., пока вторая координата не достигнет конечного значения.
В этом случае, возможно, мы сделаем лишний ход. Чтобы избежать этого лишнего хода, пер-
вое движение нужно делать в том направлении, в котором нам нужно переместиться на большее
расстояние, то есть если a > b, то на первом шаге нужно менять x, а если b > a — то y. Тогда мы
получим наилучший ответ.
Докажем это. Пусть m = max(a;b). Тогда мы должны сделать как минимум m шагов в одном
направлении, и ответ не может быть меньше m + (m (cid:0) 1), т.к. в другом направлении мы должны
сделать как минимум m (cid:0) 1 шагов. Более того, если a и b — одной чётности, то количества выпол-
ненных шагов в каждом направлении также должны быть одной чётности, и общее число шагов
будет не менее 2m. То есть общее число шагов не меньше 2m, если a и b одной чётности, и 2m (cid:0) 1,
если разной чётности.
Пусть a > b. Тогда выполнив a шагов по координате x мы окажемся либо в точке (a;b), либо в
точке (a;b(cid:0)1), так как по координате y робот будет «бегать» между y = b и y = b(cid:0)1. Поскольку мы
начали движение с координаты x, по оси y мы сделали на одно перемещение меньше, и координаты
робота будут разной чётности. В какой именно точке он окажется, зависит именно от чётности b,
поэтому в случае разных чётностей a и b он окажется в точке (a;b), и алгоритм завершит работу.
Если же a и b одной чётности, то робот окажется в точке (a;b (cid:0) 1), и ему понадобится сделать ещё
один шаг. Случай a < b рассматривается аналогично, в случае a = b наше решение достигнет цели
ровно за a + b шагов.
Пример решения. В этом решении в переменной move_x хранится логическое значение (True или
False), означающее, что робот делает очередной шаг вдоль оси OX. Это значение будет меняться
на противоположное на каждом шаге цикла.
a = int (input ())
b = int (input ())
move_x = a > b
x = 0
y = 0
while x != a or y != b:
if move_x:
if x < a :
x += 1
else :
x −= 1
else :
if y < b:
y += 1
else :
y −= 1
Страница 2 из 5
Пригласительный этап всероcсийской олимпиады по информатике для 8–10 классов
29-30 мая 2025
print (x , y)
move_x = not move_x
Используемые формулы
Будем увеличивать координаты чередуя их, пока не придём в нужную точку (x = a, y = b).Пусть m = max(a;b).точке (a;b(cid:0)1), так как по координате y робот будет «бегать» между y = b и y = b(cid:0)1.Случай a < b рассматривается аналогично, в случае a = b наше решение достигнет целиa = int (input ())b = int (input ())
Самопроверка после решения
- Я использовал все данные из условия и не добавил неподтверждённых предположений.
- Каждый переход в рассуждении объяснён правилом, формулой или ранее доказанным фактом.
- Ответ соответствует вопросу, а обозначения и единицы измерения записаны однозначно.
- Я сравнил свой ход решения с разбором и понял причину каждого отличия.
Типичные ошибки
- Пропустить часть условия.
- Сделать вывод без проверки промежуточного шага.
- Записать только ответ без объяснения.