Матч
348, Оптимальный список (OptimalList)
Дивизион 2,
Уровень 1
У Билли имеются детальные
инструкции как пройти к дому бабушки. Они представляют собой строку из символов
‘N’,‘S’,‘W’,‘E’, описывающих соответственно движение на один блок на север, юг,
запад и восток. Двигаться можно только в горизонтальном или вертикальном
направлении.
Билли необходимо составить новую
карту маршрута к бабушке, состоящую из наименьшего количества инструкций. Если
существует несколько оптимальных маршрутов, то вернуть алфавитно наименьший.
Класс: OptimalList
Метод: string
optimize(string inst)
Ограничения:
inst содержит от 1 до 50 символов ‘N’,‘S’,‘W’,‘E’.
Вход. Строка inst, описывающая путь к дому бабушки.
Выход. Количество возможных местоположений врага.
Пример входа
inst |
“NENENNWWWWWS” |
“NNEESSWW” |
“NENENE” |
Пример выхода
“NNNWWW”
“”
“EEENNN”
РЕШЕНИЕ
обработка строк
Промоделируем процесс движения к
дому бабушки в декартовой системе координат. Начальное положение Билли положим
равным (x, y) = (0, 0). После обработки списка инструкций inst точка (x, y) будет содержать координаты дома
бабушки. Строим новый список инструкций в алфавитном порядке.
ПРОГРАММА
#include <cstdio>
#include <string>
using namespace std;
class OptimalList
{
public:
string optimize(string inst)
{
int x, y, i;
string res;
for(x = y = i = 0; i < inst.size();
i++)
if(inst[i] == 'S')
y--; else
if(inst[i] == 'N')
y++; else
if(inst[i] == 'W')
x--; else
if(inst[i] == 'E')
x++;
if (x > 0) res = res + string(x,'E');
if (y > 0) res = res + string(y,'N');
if (y < 0) res = res + string(-y,'S');
if (x < 0) res = res + string(-x,'W');
return res;
}
};