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

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

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

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

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

Ре­ше­ние.

Такое зна­че­ние S  — 31. При S  =  31 Петя своим пер­вым ходом может по­лу­чить по­зи­ции 32, 35 и 93. При по­зи­ци­ях 35 и 93 Ваня утра­и­ва­ет ко­ли­че­ство кам­ней в куче в 3 раза и вы­иг­ры­ва­ет своим пер­вым ходом. В по­зи­ции 32 Ваня до­бав­ля­ет в кучу один ка­мень и по­лу­ча­ет по­зи­цию 33. Петя своим вто­рым ходом может по­лу­чить по­зи­ции 34, 37 или 99. Во всех слу­ча­ях Ваня утра­и­ва­ет ко­ли­че­ство кам­ней и вы­иг­ры­ва­ет своим вто­рым ходом.

 

Ответ: 31.

 

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

#Ис­клю­чим стра­те­гию Вани, ко­то­рая поз­во­лит ему га­ран­ти­ро­ван­но вы­иг­рать пер­вым ходом:

def f(x, h):

if (h == 3 or h == 5) and x >= 100:

return 1

elif h == 5 and x < 100:

return 0

elif x >= 100 and h < 5:

return 0

else:

if h % 2 == 0:

return f(x + 1, h + 1) or f(x + 4, h + 1) or f(x * 3, h + 1) # стра­те­гия по­бе­ди­те­ля

else:

return f(x + 1, h + 1) and f(x + 4, h + 1) and f(x * 3, h + 1) # стра­те­гия про­иг­рав­ше­го

def f1(x, h):

if h == 3 and x >= 100:

return 1

elif h == 3 and x < 100:

return 0

elif x >= 100 and h < 3:

return 0

else:

if h % 2 == 0:

return f1(x + 1, h + 1) or f(x + 4, h + 1) or f(x * 3, h + 1) # стра­те­гия по­бе­ди­те­ля

else:

return f1(x + 1, h + 1) and f(x + 4, h + 1) and f(x * 3, h + 1) # стра­те­гия про­иг­рав­ше­го(любой ход)

for x in range(1, 100):

if f(x, 1) == 1:

print(x)

print("====")

for x in range(1, 100):

if f1(x, 1) == 1:

print(x) # Ис­клю­чим эти зна­че­ния из спис­ка выше

Источник: ЕГЭ по ин­фор­ма­ти­ке 19.06.2023. Ос­нов­ная волна. Раз­ные го­ро­да