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

Для игры, опи­сан­ной в за­да­нии 19, най­ди­те ми­ни­маль­ное зна­че­ние S, при ко­то­ром од­но­вре­мен­но вы­пол­ня­ют­ся два усло­вия:

—  у Вани есть вы­иг­рыш­ная стра­те­гия, поз­во­ля­ю­щая ему вы­иг­рать пер­вым или вто­рым ходом при любой игре Пети;

—  у Вани нет стра­те­гии, ко­то­рая поз­во­лит ему га­ран­ти­ро­ван­но вы­иг­рать пер­вым ходом.

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

Ре­ше­ние.

Такое зна­че­ние S  — 14. При S  =  14 Петя своим пер­вым ходом может по­лу­чить по­зи­ции 15, 18 и 56.

Рас­смот­рим зна­че­ние S  =  15. Своим пер­вым ходом Ваня уве­ли­чи­ва­ет ко­ли­че­ство кам­ней в куче на 4. Тогда Петя может по­лу­чить по­зи­ции 20, 23 и 76. Во всех слу­ча­ях Ваня уве­ли­чи­ва­ет ко­ли­че­ство кам­ней в куче в 4 раза и вы­иг­ры­ва­ет.

Рас­смот­рим зна­че­ние S   =  18. Своим пер­вым ходом Ваня уве­ли­чи­ва­ет ко­ли­че­ство кам­ней в куче на 1. Тогда Петя может по­лу­чить по­зи­ции 20, 23 и 76. Во всех слу­ча­ях Ваня уве­ли­чи­ва­ет ко­ли­че­ство кам­ней в куче в 4 раза и вы­иг­ры­ва­ет.

Рас­смот­рим зна­че­ние S  =  56. Своим пер­вым ходом Ваня уве­ли­чи­ва­ет ко­ли­че­ство кам­ней в 4 раза и вы­иг­ры­ва­ет.

 

Ответ: 14.

 

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са (ана­ли­ти­че­ское).

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

То есть не­об­хо­ди­мо, чтобы ход из по­зи­ции для S был либо в зна­че­ния 15 или 18, либо в по­зи­цию с ко­ли­че­ством кам­ней от 20 до 77. При этом зна­че­ние S не долж­но вхо­дить в уже най­ден­ные мно­же­ства для задач 19 и 20. По­лу­ча­ем:

 си­сте­ма вы­ра­же­ний со­во­куп­ность вы­ра­же­ний S плюс 1=15, S плюс 1=18, S плюс 1 боль­ше или равно 20, конец си­сте­мы . со­во­куп­ность вы­ра­же­ний S плюс 4=15, S плюс 4=18, S плюс 4 боль­ше или равно 20, конец со­во­куп­но­сти . со­во­куп­ность вы­ра­же­ний S=4=15, S умно­жить на 4=18, S умно­жить на 4 боль­ше или равно 20 конец со­во­куп­но­сти . конец со­во­куп­но­сти . рав­но­силь­но си­сте­ма вы­ра­же­ний со­во­куп­ность вы­ра­же­ний S=14,S=17, S боль­ше или равно 19, конец си­сте­мы . со­во­куп­ность вы­ра­же­ний S=11,S=14, S боль­ше или равно 16 конец со­во­куп­но­сти . S боль­ше или равно 5 конец со­во­куп­но­сти . рав­но­силь­но со­во­куп­ность вы­ра­же­ний S=14,S=17. конец со­во­куп­но­сти .

 

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са (руч­ное, эл. таб­ли­цы).

В пер­вой стро­ке ука­жем ко­ли­че­ство кам­ней в куче.

Во вто­рой стро­ке по­сле­до­ва­тель­но за­кра­сим сна­ча­ла клет­ки, со­от­вет­ству­ю­щие игре в один ход (зе­ле­ный), затем в два (крас­ный). После этого най­дем ячей­ки, ко­то­рые со­от­вет­ству­ют игре в три хода (зе­ле­ный 2) и игре в 4 хода (крас­ный 2).

 

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са на языке Python.

Так как мы будем на­хо­дить по­бе­ду вто­рым или чет­вер­тым ходом, не­об­хо­ди­мо огра­ни­чить пе­ре­бор зна­че­ний усло­ви­ем, что пе­ре­би­ра­е­мое зна­че­ние не вхо­дит в мно­же­ство s2.

# мно­же­ство вер­шин для игры в 1 ход

s1 = set()

for s in range(1, 77):

if any(x >= 78 for x in (s+1, s+4, s*4)):

s1.add(s)

# мно­же­ство вер­шин для игры в 2 хода

s2 = set()

for s in range(1, 77):

if all(x in s1 for x in (s+1, s+4, s*4)):

s2.add(s)

# мно­же­ство вер­шин для игры в 3 хода

s3 = set()

for s in range(1, 77):

if all(x in s2 for x in (s+1, s+4, s*4)):

s3.add(s)

# мно­же­ство вер­шин для чет­вер­то­го хода

s4 = set()

for s in range(1, 77):

if s not in s2 and\

all(x in s1|s3 for x in (s+1, s+4, s*4)):

s4.add(s)

print(min(s4))

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

def move(n,lim,s):

# n - номер хода, lim - огра­ни­че­ние на число ходов, s - число кам­ней

# Ре­зуль­тат: 1 - вы­иг­рал пер­вый игрок, 2 - вто­рой, 0 - по­бе­ди­те­ля нет

player = 2 - n%2# Те­ку­щий игрок

rival = 3 - player# Про­тив­ник

if s >= 78:# Игра уже окон­че­на

return rival # Вы­иг­рал сде­лав­ший преды­ду­щий ход

if n > lim:# Пре­вы­шен лимит ходов

return 0# По­бе­ди­тель не опре­де­лен

pos = [s+1, s+4, s*4]# По­зи­ции после хода иг­ро­ка

res = [move(n+1, lim, x) for x in pos]# Ре­зуль­та­ты ходов

if any([x == player for x in res]):# Есть вы­иг­рыш­ный ход

return player

if all([x == rival for x in res]):# Все ходы про­иг­рыш­ные

return rival

return 0# По­бе­ди­тель не опре­де­лен

 

print('#19:',*[s for s in range(1,78) if move(1,2,s)==2])

print('#20:',*[s for s in range(1,78) if move(1,1,s)==0 and move(1,3,s)==1])

print('#21:',*[s for s in range(1,78) if move(1,2,s)==0 and move(1,4,s)==2])

Источник: ЕГЭ по ин­фор­ма­ти­ке 06.04.2023. До­сроч­ная волна
1
Тип 19 № 55815
i

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

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

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

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

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

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


2
Тип 20 № 55816
i

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

 

Ответ: