Форум » Форум, сайт и общие вопросы » не сходится ответ » Ответить

не сходится ответ

Мурад: Не сходится ответ в задании №20-92. Нет ли ошибки в ответе?

Ответов - 3

Ж: что за задача? Можно текст, ответы и ваше решение?

Мурад: 92) (А. Рогов) Два игрока, Паша и Витя, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Паша. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Например, пусть в одной куче 10 камней, а в другой 5 камней; такую позицию в игре будем обозначать (10, 5). Тогда за один ход можно получить любую из четырёх позиций: (11, 5), (20, 5), (10, 6), (10, 10). Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 91. Если при этом в куче оказалось не более 110 камней, то победителем считается игрок, сделавший последний ход. В противном случае победителем становится его противник, при этом считается, что противник сделал ход. В начальный момент в первой куче было сорок камней, во второй куче – S камней; 1 ≤ S ≤ 50. Укажите, сколько существует значений S, при которых у Паши есть выигрышная стратегия, причём одновременно выполняются два условия: – Паша не может выиграть за один ход; – Паша может выиграть своим вторым ходом независимо от того, как будет ходить Витя. Мне кажется здесь неверно объяснили условие. "Если при этом в куче оказалось не более 110 камней". Из решения сайта видно что тут говорится про сумму в двух кучах. Однако в условии говорят про кучУ а не про кучИ. у меня получилось три значения (5,8,9). в ответе получилось 4 значения. Я считал, что если в одно куче становится больше чем 110 камней, то выигрывает противник того кто сделал последний ход.

Ж: Согласна, что условие содержит ошибку. Такой же результат получила. Только другим кодом. [pre2] def f(n,m): return (n+1,m),(n*2,m),(n,m*2) , (n,m+1) gp={c for c in product(range(1,200) , repeat=2) } sp={(40,c) for c in range(1,51)} wp={c for c in gp if sum(c)>=91 and max(c)<=110} lp= {c for c in gp if max(c)>110} h={c for c in gp if any(t in wp for t in f(*c)) and sum(c)<=110}; gp-=h; sp-=h; lp|=h h={c for c in gp if all(t in lp for t in f(*c)) and sum(c)<=110}; gp-=h; sp-=h; wp|=h h={c for c in sp if any(t in wp for t in f(*c)) and sum(c)<=110}; print(sorted(h)) [/pre2] Ответ автора получается, если применить ограничение 110 на сумму в кучках [pre2] def f(n,m): return (n+1,m),(n*2,m),(n,m*2) , (n,m+1) gp={c for c in product(range(1,200) , repeat=2) } sp={(40,c) for c in range(1,51)} wp={c for c in gp if 110>=sum(c)>=91} lp= {c for c in gp if sum(c)>=111} h={c for c in gp if any(t in wp for t in f(*c)) and sum(c)<=110}; gp-=h; sp-=h; lp|=h h={c for c in gp if all(t in lp for t in f(*c)) and sum(c)<=110}; gp-=h; sp-=h; wp|=h h={c for c in sp if any(t in wp for t in f(*c)) and sum(c)<=110}; print(sorted(h)) [/pre2]




полная версия страницы