4. квест
новый квест, в котором участники должны выбраться с территории проведения,
представляет собой прямоугольник из 16 комнат в виде квадрата 4 × 4. каждая комната имеет
четыре двери, ведущие в соседние комнаты, из комнат на краю прямоугольника двери ведут
наружу, через эти двери можно покинуть территорию проведения квеста.
в начале квеста в каждой комнате находится по человеку, а все двери заперты. после
начала квеста организаторы дистанционно открывают в каждой комнате запирающий
механизм одной из четырёх дверей. теперь человек, находящийся в этой комнате, может
открыть эту дверь и перейти в соседнюю комнату, через другие три двери выйти из этой
комнаты нельзя. при этом может оказаться так, что дверь, соединяющая две комнаты, будет
отпираться с одной стороны, тогда пройти через эту дверь можно только с той стороны,
с которой она будет открываться, проходить через дверь в обратном направлении нельзя, если
в соседней комнате будет отперта не эта дверь, а какая-то другая. если комната находится на
краю территории и из этой комнаты открыта дверь наружу, то, пройдя через эту дверь,
участник навсегда покидает территорию квеста.
после начала квеста и отпирания дверей участники начинают перемещаться между
комнатами. каждый участник перемещается в соседнюю открытую комнату и продолжает
перемещаться до тех пор, пока не покинет территорию квеста. однако возможна ситуация,
когда некоторые участники будут бесконечно перемещаться между комнатами и никогда не
выйдут наружу.
разработчки квеста попросили вас составить такой план отпирания дверей, при
котором ровно 7 человек из 16 смогут выбраться наружу с территории квеста. при этом вам
необходимо минимизировать количество дверей, которые будут открыты из крайних
комнат наружу (тех дверей, через которые участники будут покидать территорию
квеста).
ответ на эту нужно записать в виде плана территории квеста, состоящего
из 4 строк, в каждой строке должно быть ровно 4 символа из следующего числа возможных.
u: дверь в верхнюю по данному плану комнату.
d: дверь в нижнюю комнату.
l: дверь в левую комнату.
r: дверь в правую комнату.
например, рассмотрим следующий план квеста, в котором 8 комнат:
rdrr
ulrr
этот план соответствует следующему рисунку. стрелками обозначены открытые
двери, точками помечены комнаты, обитатели которых выйдут из квеста.
в этом примере наружу выходят 4 человека из 8.
вам необходимо составить план квеста из 4 рядов по 4 комнаты, в котором наружу
выходят 7 человек из 16. при этом чем меньше будет число дверей, открытых из крайних
комнат наружу, тем больше вы получите
т.к. n заранее не дано(и это все лишь фрагмент кода) то m при разных n будет получаться разный. n лежит в промежутке [-2;8]
потому, что тут m:=(l+r)div 2; при n<-2 получается индекс <0
и при n>8 в цикле индекс >7
а массив у нас всего 8 элементов
Поэтому в цикле я вывел все значения m при всех возможных значениях n
Надеюсь понятно объяснил.
при n=-2 m=0
при n=-1 m=0
при n=0 m=0
при n=1 m=1
при n=2 m=2
при n=3 m=3
при n=4 m=4
при n=5 m=5
при n=6 m=6
при n=7 m=6
при n=8 m=6
Pascal
var
a:array [0..7] of integer = (34, 16, 16, 2, 2, 0, -4, -4);
l, n, m, key, r:integer;
flag:boolean;
begin
for n:=-2 to 8 do begin
key:=-4;
L:=1;
r:=n;
flag:=false;
Repeat
m:=(l+r)div 2;
if a[m]>key then
l:=m+1
else
if a[m]=key then
flag:=true
else
r:=m-1;
until flag or (l>r);
writeln('при n=',n,' m=', m);
end;
end.