Как решить задачу змейка

Как решить задачу змейка

"Змейка" — это аркадная компьютерная игра, которая ведется на квадратном поле NxN, разбитом на квадраты 1x1. Строки поля пронумерованы от 1 до N сверху вниз, а столбцы — от 1 до N слева направо. Каждой клетке поля можно поставить в соответствие ее координаты (r, c), где r — это номер строки, в которой она находится, а c — номер столбца.

В любой момент игры змейка занимает некоторую последовательность квадратов поля такую, что два соседних в этой последовательности квадрата имеют общую сторону. В первом квадрате последовательности находится хвост змейки, а в последнем — ее голова. Изначально и хвост, и голова змейки находятся в клетке с координатами (1, 1), а в каждой из остальных клеток есть или ягодка, или грибок.

За один ход змейка может переместить голову в одном из 4-х направлений — вверх, влево, вправо, вниз. Если соседнего квадрата в направлении хода не существует или, если в этом квадрате находится грибок или сама змейка, то она погибает и игра заканчивается. Если же в этом квадрате находится ягодка, то змейка съедает ее и увеличивает за счет этого свою длину на один квадрат. Пусть, к примеру, в некоторый момент игры змейка расположена следующим образом:

Тогда при ходе вверх и вниз змейка погибает, так как попадает в клетку с собственным туловищем. При ходе вправо змейка также погибает, так как попадает в клетку с грибком. Единственный ход, при котором змейка не погибает — влево. После этого хода она будет располагаться следующим образом:

Цель игрока — управлять змейкой так, чтобы, перед тем как погибнуть, она набрала как можно большую длину. Школьнику Васе играть в "Змейку" самому неинтересно, поэтому он разработал алгоритм управления змейкой. Первый ход, согласно алгоритму Васи, змейка делает вправо, если справа от нее нет грибка, и вниз — в противном случае (если снизу есть грибок, то после первого хода змейка погибает). Далее, в любой момент игры, змейка помнит направление, в котором она делала предыдущий ход, и на следующем ходу пытается сделать ход в том же направлении. Если это приводит к немедленной смерти, то змейка изменяет направление движения, поворачивая на 90 градусов по часовой стрелке, и делает ход в новом направлении (даже если это приводит к ее немедленной гибели).

Читайте также:  Как взломать код wifi

Пусть к примеру, поле для игры в "Змейку" изначально выглядит следующим образом:

Тогда змейка, двигаясь по алгоритму Васи, непосредственно перед тем, как погибнуть, расположится так, как показано на рисунке:

Вася понимает, что разработанный им алгоритм — не оптимальный. Например, на рисунке выше змейка вполне могла бы дальше пойти вправо и увеличить свою длину, а, действуя по Васиному алгоритму, она делает ход влево и погибает. Тем не менее, Васе кажется, что его алгоритм — очень хороший и позволяет змейке достичь очень большой длины.

Помогите Васе проверить эту гипотезу, написав программу, моделирующую работу его алгоритма. Программа получает на вход размер поля N и расположение всех грибков, и находит, сколько квадратов будет занимать змейка непосредственно перед тем, как погибнуть, если она будет двигаться по алгоритму Васи.

Входные данные

В первой строке задано целое число N (2N40000) — размер поля. Во второй — количество грибков K (K100), последующие K строк содержат координаты X грибков, далее следует опять число K и в последних K строках — координаты Y соответствующих грибков. Гарантируется, что никаких два грибка не расположены в одной клетке и в клетке (1, 1) нет грибка.

Выходные данные

Единственное целое число, равное количеству квадратов, занимаемых змейкой непосредственно перед ходом, на котором она погибнет, в предположении, что змейка двигается согласно алгоритму Васи.

Доведи змейку до листа в правильном нижнем углу. Числа указывают, сколько клеток должна занимать змейка в строчках и столбиках.

Змейка (4 класс)

Решение:
Змейка должна по следующему пути >>

Змейка (4 класс) ответ

Заполните змейку цифрами от 1 до 9, используя каждую цифру только один раз. Двоеточие “:” означает разделить и вы должны соблюдать стандартный порядок операций, что означает, что умножение/деление идет перед сложением/вычитанием.

Читайте также:  Какая фигура лишняя 0123

Попробуйте решить сами. Проверь себя. Потом посмотри вариант решения. Ниже по тексту))). ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Ответ:
т.е один из вариантов решения.
Теперь ближе к делу. Как уже было сказано, в змейке высшая математика не участвует.
Можно решить змейку по принципу процесса проб и ошибок, перебирая числа. Или написать простую компьютерную программу, чтобы она решить её за нас. Что сделают многие из вас))). Пожалуй, более поучительна головоломка для начинающего компьютерщика, чем для начинающего математика.)))
Но те кто воспитанники старой школы, берут карандаш и бумагу:
Змею записываем в виде уравнения:
a + (13b/c) + d + 12e – f – 11 + (gh/i)– 10 = 66
Мы пытаемся найти а, b, с, d, e, f, g, h и i, которые мы знаем, некоторые комбинации из цифр 1,2,3,4,5,6,7,8 и 9.
Прежде, чем начать поиск решения, учтите, что общее число способов, заполнить змею: составляет 362880 возможных комбинаций из цифр от 1 до 9, помещенных в девять чисел.
Приведем уравнение в порядок:
a + (13b/c) + d + 12e – f +(gh/i) = 66 + 11 + 10 = 87
или
a + d – f + (13b/c) + 12e +(gh/i) = 87
Отсюда мы можем предположить, что b/c и gh/i будут целыми числами, а также, что мы не хотим, чтобы 13b/c быто слишком большим числом.
Зная это, мы начинаем подставлять числа в и смотрим что получится.
Существует множество различных вариантов, которые приведут к правильному решению, существует более 100 решений).
Вариант решения.
Чтобы число 13b/c было маленьким, пусть b = 2 и c = 1.
Получается:
a + d – f + 26 + 12e +(gh/i) = 87
или
a + d – f + 12e +(gh/i) = 61
Оставшиеся цифры- это цифры от 3 до 9. Они включают в себя простые числа 3, 5 и 7.
Пусть a = 3, d = 5 и f = 7.
Подставляем:
3 + 5 – 7 + 12e +(gh/i) = 61
или
12e +(gh/i) = 60
Оставшиеся цифры являются 4,6,8,9.
Подставляем:
е = 4
g = 9
h = 8
i= 6
48 + (72/6) = 48 +12 = 60

Ссылка на основную публикацию
Как поставить старую версию скайпа
Программа Skype, как и любой другой активно развивающийся софт, постоянно обновляется. Однако не всегда новые версии выглядят и работают лучше...
Как повернуть диаграмму на 90 градусов
Научимся вращать (поворачивать) график функции относительно начала координат. Для примера используем график функции y=x*sin(10*x). Координаты (x'; y') в результате поворота...
Как повернуть купольную камеру видеонаблюдения
Страница 12 5 Регулировка положения видеокамеры Положение купольной видеокамеры можно регулировать по двум осям. Следя за изображением на мониторе, отрегулируйте...
Как поставить фотографию на контакт в андроид
На любом смартфоне реализована возможность установки изображения на телефонный контакт. Оно будет отображаться при поступлении входящих звонков от этого контакта...
Adblock detector