Задания
Версия для печати и копирования в MS Word
Тип 20 № 76717
i

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

В от­ве­те за­пи­ши­те най­ден­ные зна­че­ния в по­ряд­ке воз­рас­та­ния.

 

Ответ:

Спрятать решение

Ре­ше­ние.

Если игрок по­лу­ча­ет кучу из 56 кам­ней, то он по­беж­да­ет, при­ба­вив к куче мак­си­маль­ный де­ли­тель 56. Сле­до­ва­тель­но, игрок по­лу­чив­ший кучу из 55 кам­ней не может вы­иг­рать, но может вы­иг­рать со­пер­ник, не­за­ви­си­мо от хода пер­во­го иг­ро­ка. Тогда мак­си­маль­ная куча, при ко­то­рой вы­иг­ра­ет Петя вто­рым ходом, не­за­ви­си­мо от хода Вани - 54 камня. Петя до­бав­ля­ет один ка­мень и, при любом ходе Вани, вы­иг­ры­ва­ет своим вто­рым ходом.

Для на­хож­де­ния ми­ни­маль­но­го де­ли­те­ля рас­смот­рим ва­ри­ан­ты, при ко­то­рых мы можем по­лу­чить 55 кам­ней.

Ва­ри­ан­ты:

54+1

50+5

44+11

Ми­ни­маль­ное зна­че­ние - 44 камня. Петя до­бав­ля­ет 11 кам­ней, тогда, не­за­ви­си­мо от хода Вани, Петя вы­иг­ры­ва­ет своим вто­рым ходом.

 

Ответ: 44; 54.

 

При­ве­дем ре­ше­ние Мар­га­ри­ты Фаль­ко на языке Python.

def g(s, p, end):

if s > 111: return p in end

if p > max(end): return False

moves = [g(s + k, p+1, end) for k in range(1, s+1) if s % k == 0]

return any(moves) if ((p+1) % 2) == (end[0] % 2) else all(moves)

print('19', [s for s in range(16, 100) if g(s, 0, [2])])

print('20', [s for s in range(16, 100) if g(s, 0, [3])])

print('21', [s for s in range(16, 100) if g(s, 0, [2, 4]) and not g(s, 0, [2])])