Задача A. Новогодняя катка

Ввод / вывод:интерактивный   Ограничение времени:500 сек
Максимальный балл:500   Ограничение памяти:1512 Мб

Условие

Игра происходит на поле размером W на H клеток. Каждое поле содержит слой снега неотрицательной толщины. Также на клетке может находиться либо один из игроков, либо снежный ком, либо препятствие.

В игре участвуют 1 и более игроков. Игроки ходят по очереди. Каждый ход игрок может сместиться на одну клетку влево, вправо, вверх или вниз, толкая перед собой снежный ком. Весь снег из клетки, на которую смещается игрок, добавляется к снежному кому, который оказывается на следующей в том же направлении клетке. Если клетка для снежного кома занята, игрок не может сместиться в этом направлении. Снежный ком имеет максимально допустимый размер M, после которого он больше не растёт.

У каждого игрока имеется выделенная область карты, в которые он должен переместить как можно больше снега в комьях. Счёт игрока определяется как сумма размеров комьев снега, находящихся в его области. Игра продолжается фиксированное количество ходов.

Конкретные значения параметров игры и карту игрового поля можно получить из параметров при инициализации игрового ИИ.


class MapInfo {
    width //int ширина карты
    height //int высота карты
    map //[[char]] массив символов '.' - поле,'#' -стенка, '*' - ёлка
    spawns //[{x,y}] массив объектов {x,y} - координаты спауна игроков (координаты начинаются с левого верхнего угла икрана);
    bases //[{leftTop{x,y}, bottomRight{x,y}}] массив объектов {leftTop{x,y}, bottomRight{x,y}} - прямоугольников описывающих базы куда нужно доставлять снежные шары
    turns //int количество ходов на карте;
    snowIncreasePeriod //int через сколько ходов снова выпадет снег;
    lastSnowIncreaseStep //int ход после которого снег не выпадает;
    snowIncreaseValue //(int | [[int]]) число или массив (размером с карту) обозначающий величину увеличения снега в каждой клетке;
    startSnowMap //(int | [[int]]) число или массив (размером с карту) обозначающий величину увеличения снега в каждой клетке;
}

// минимальное тело бота
{
    Init({ SafeMapInfo, index: i }) //функция вызывается 1 раз при создание сцены. Принимает информацию о карте и индекс бота. Индекс указывает на спаун и базу игрока.

    GetDirection({position, enemies, snowBallsInfo, snowLevelMap}) //функция вызывается каждый ход. 
        //Принимает:
        //position {x,y} - координаты игрока
        //enemies [{name,x,y}] - массив описания противников (их координаты и имя)
        //snowBallsInfo [{x,y, value, id}] - массив описания снежных шаров на карте (их координаты, количество снега в нём, его уникальный идентификатор)
        //snowLevelMap [[int]] - массив описывающий количество снега в каждой ячейке
}  

Система доступна здесь.


0.087s 0.013s 13