OpenFIPI 2.0
21
6
687734
Задание 21
Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений S, в ответе запишите наименьшее из них.
Задание 19 https://openfipi.devinf.ru/task/521F94
Задание 20 https://openfipi.devinf.ru/task/67484B
Задание 21 https://openfipi.devinf.ru/task/687734
17
var
mv : array[1..500] of integer;
Function M(x: integer) := (x + 1, x + 4, x * 3);
begin
for var i:= 67 to 500 do
mv[i] := 5;
for var i:= 1 to 66 do
begin
var r := M(i);
if (mv[i] = 0) and ((mv[r[0]] = 5) or (mv[r[1]] = 5) or (mv[r[2]] = 5)) then mv[i] := 1;
end;
// 19
for var i:= 1 to 66 do
begin
var r := M(i);
if (mv[i] = 0) and ((mv[r[0]] = 1) and (mv[r[1]] = 1) and (mv[r[2]] = 1)) then mv[i] := -1;
end;
writeln(19);
for var i := 1 to 67 do
begin
if mv[i] = -1 then
writeln(i, ' ', mv[i]);
end;
// 20
for var i:= 1 to 66 do
begin
var r := M(i);
if (mv[i] = 0) and ((mv[r[0]] = -1) or (mv[r[1]] = -1) or (mv[r[2]] = -1)) then mv[i] := 2;
end;
writeln();
writeln(20);
for var i := 1 to 67 do
begin
if mv[i] = 2 then
writeln(i, ' ', mv[i]);
end;
// 21
for var i:= 1 to 66 do
begin
var r := M(i);
if (mv[i] = 0) and (((mv[r[0]] = 1) or (mv[r[0]] = 2)) and ((mv[r[1]] = 1) or (mv[r[1]] = 2)) and ((mv[r[2]] = 1) or (mv[r[2]] = 2))) then mv[i] := -2;
end;
writeln();
writeln(21);
for var i := 1 to 67 do
begin
if mv[i] = -2 then
writeln(i, ' ', mv[i]);
end;
end.
Просмотреть отправленные ответы 687734