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

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

Игра за­вер­ша­ет­ся в тот мо­мент, когда ко­ли­че­ство кам­ней в одной из куч до­сти­га­ет 48. По­бе­ди­те­лем счи­та­ет­ся игрок, сде­лав­ший по­след­ний ход, то есть пер­вым по­лу­чив­ший кучу, в ко­то­рой будет 48 или боль­ше кам­ней. Из­вест­но, что Петя смог вы­иг­рать пер­вым ходом. Какое наи­мень­шее число кам­ней могло быть сум­мар­но в двух кучах?

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

Ре­ше­ние.

Такая си­ту­а­ция воз­мож­на при S  =  46. Могут быть кучи (45, 44 и мень­ше), (46, 45 и мень­ше), (47, 46 и мень­ше) и (24, 25 и боль­ше). По­сколь­ку нам не­об­хо­ди­мо на­брать наи­мень­шее ко­ли­че­ство кам­ней сум­мар­но в двух кучах, то такая по­зи­ция (45, 1). Петя уве­ли­чит ко­ли­че­ство кам­ней в боль­шей куче на три и вы­иг­ра­ет пер­вым ходом.

 

При­ве­дем ре­ше­ние на языке Python.

from itertools import product as p

 

def Win(ma, mi, k):

ma, mi = max(ma, mi), min(ma, mi)

return 0 if ma >= 48 or mi >= 48 else any([Lose(ma+i,mi,k-1) for i in range(1,4)] + [Lose(ma,mi*2,k-1)] if ma!=mi\

else [Lose(ma+i,mi,k-1) for i in range(1,4)])

 

def Lose(ma, mi, k):

ma, mi = max(ma, mi), min(ma, mi)

return 1 if ma >= 48 or mi >= 48 else 0 if not k else\

all([Win(ma+i,mi,k-1) for i in range(1,4)] + [Win(ma,mi*2,k-1)] if ma!=mi else [Win(ma+i,mi,k-1) for i in range(1,4)])

 

print('За­да­ние 19:', min([x+y for x, y in p(range(1,48), repeat=2) if Win(x, y, 1)]))

 

Ответ: 46.

 

При­ве­дем ре­ше­ние Да­ни­и­ла Тра­ви­но­ва на языке Python.

def game(p1, p2, mov):

if (p1 >= 48 or p2 >= 48) and mov == 2:

return 1

elif mov > 2:

return 0

else:

if p1 > p2:

return game(p1 + 1, p2, mov + 1) or game(p1 + 2, p2, mov + 1) or game(p1 + 3, p2, mov + 1) or game(p1, p2 * 2, mov + 1)

elif p1 == p2:

return game(p1 + 1, p2, mov + 1) or game(p1 + 2, p2, mov + 1) or game(p1 + 3, p2, mov + 1) or game(p1, p2 + 1, mov + 1) or game(p1, p2 + 2, mov + 1) or game(p1, p2 + 3, mov + 1)

else:

return game(p1, p2 + 1, mov + 1) or game(p1, p2 + 1, mov + 1) or game(p1, p2 + 3, mov + 1) or game(p1 * 2, p2, mov + 1)

sum = float('inf')

for i in range(1, 47):

for j in range(1, 47):

if game(i, j, 1) == 1:

sum = min(sum, i + j)

print(sum)


Аналоги к заданию № 58486: 58527 Все

1
Тип 20 № 58487
i

В игре, опи­сан­ной в за­да­нии 19, в на­чаль­ный мо­мент в пер­вой куче было 13 кам­ней, а во вто­рой  — S кам­ней, 1 ≤ S ≤ 47.

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

В от­ве­те за­пи­ши­те сна­ча­ла ми­ни­маль­ное зна­че­ние, затем мак­си­маль­ное.

 

Ответ:


Аналоги к заданию № 58487: 58528 Все


2
Тип 21 № 58488
i

В игре, опи­сан­ной в за­да­нии 19, в на­чаль­ный мо­мент в пер­вой куче было 39 кам­ней, а во вто­рой  — S кам­ней, 1 ≤ S ≤ 47.

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


Аналоги к заданию № 58488: 58529 Все