OpenFIPI 2.0

19

5

521F94

Задание 19

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

Игра завершается в тот момент, когда количество камней в куче становится не менее 67.

Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 67 или более камней.

В начальный момент в куче было S камней; 1 ≤ S ≤ 66.

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

Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

Задание 19 https://openfipi.devinf.ru/task/521F94

Задание 20 https://openfipi.devinf.ru/task/67484B

Задание 21 https://openfipi.devinf.ru/task/687734

22

var
  mv: array[1..500] of integer;
begin
  // Выигрышные позиции за 1 ход
  for var i := 1 to 66 do
    if (i * 3 >= 67) then mv[i] := 1; 
  // 19. Проигрышные позиции за 1 ход
  writeln('Задание 19');
  for var i := 1 to 66 do
    if (mv[i] = 0) and (mv[i + 1] = 1) and (mv[i + 4] = 1) and (mv[i * 3] = 1) then
      begin
        mv[i] := -1;
        write(i, ' ');
      end;   
  // 20. Выигрышные позиции за 2 хода
  writeln();
  writeln('Задание 20');
  for var i := 1 to 66 do
    if (mv[i] = 0) and ((mv[i + 1] = -1) or (mv[i + 4] = -1) or (mv[i * 3] = -1)) then 
      begin
        mv[i] := 2;
        write(i, ' ');
      end; 
  // 21. Проигрышные позиции за 2 хода
  writeln();
  writeln('Задание 21');
  for var i := 1 to 66 do
    if (mv[i] = 0) and (mv[i + 1] in [1..2]) and (mv[i + 4] in [1..2]) and (mv[i * 3] in [1..2]) then write(i, ' ');
end.

Просмотреть отправленные ответы 521F94