Разбор задач части С
Задача С3 (Анализ игры. Построение графа (дерева) игры)
Непонятно, по каким причинам эта задача включена в раздел С, который следовало бы посвятить программированию. Эту задачу в модифицированном виде стоило бы включить в раздел В. Это самая легкая задача в разделе С. Как правило, если школьники представляли только одну задачу, то это была задача С3. Большинство давало правильное решение задачи. Я не буду приводить той формулировки, которая давалась на экзамене, а рассмотрю более сложный вариант, частным случаем которого является экзаменационный вариант.
Вот как выглядит модифицированный вариант задачи:
<<
Два игрока играют в камушки. Перед ними куча из S камней (1 <= S <= 34). Каждый игрок обладает неограниченным запасом камней. У каждого игрока три возможных хода:
- Добавить в кучу 1 камень.
- Добавить в кучу 2 камня.
- Удвоить число камней в куче.
Выигрывает игрок, который при своем ходе строит кучу, содержащую более 34 камней. Для всех начальных значений S требуется указать, какой игрок выигрывает (первый или второй) и какова его выигрышная стратегия.
>>
Решение задачи представим в виде таблицы, содержащей разбор случаев для всех возможных значений S. Вначале рассмотрим очевидный случай, а затем все последующие варианты будем сводить к ранее рассмотренным вариантам.
Вариант (Case) | Начальное состояние S | Стратегия игрока | Результат хода | Результат игры | Число ходов |
---|---|---|---|---|---|
1 | 18 – 34 | *2 | >=36 | Выигрыш | 1 |
2 | 17 | +1, +2, *2 | Case1 | Проигрыш | 1 |
3 | 16 | +1 | Case2 | Выигрыш | 2 |
15 | +2 | ||||
4 | 14 | +1, +2 | Case3 | Проигрыш | <=2 |
*2 | Case1 | ||||
5 | 13 | +1 | Case4 | Выигрыш | <=3 |
12 | +2 | ||||
6 | 11 | +1, +2 | Case5 | Проигрыш | <=3 |
*2 | Case1 | ||||
7 | 10 | +1 | Case6 | Выигрыш | <=4 |
9 | +2 | ||||
8 | 8 | +1, +2 | Case7 | Проигрыш | <=4 |
*2 | Case3 | ||||
9 | 7 | *2 | Case4 | Выигрыш | <=5 |
6 | +2 | Case8 | |||
10 | 5 | +1, +2 | Case9 | Проигрыш | <=5 |
*2 | Case7 | ||||
11 | 4 | *2 | Case8 | Выигрыш | <=6 |
3 | +2 | Case10 | |||
12 | 2 | +1, +2, *2 | Case11 | Проигрыш | <=6 |
13 | 1 | +1 | Case12 | Выигрыш | <=7 |
Выигрыш для варианта 1 очевиден. Каждый последующий вариант при оптимальной стратегии сводится к уже рассмотренным вариантам. Если в начальной позиции можно сделать ход, в результате которого приходим к варианту, помеченному как проигрыш, то это означает, что найдена выигрышная стратегия, поскольку после Вашего хода второй игрок проигрывает. Если же в начальной позиции, какой бы ход Вы не сделали, приходим к позиции, помеченной как выигрыш, то это означает, что выигрышная стратегия есть у второго игрока.
Результат игры в таблице показан для первого игрока, делающего первый ход. Очевидно, что когда первый игрок проигрывает, то второй выигрывает. В таблице указана та стратегия, которая приводит к выигрышу. В строках, задающих проигрыш, рассматриваются все возможные ходы игрока. Показано, что для любого хода первого игрока у второго игрока в этой ситуации имеется выигрышная стратегия.
Построение полной таблицы избыточно. Нетрудно видеть, что второй игрок выигрывает для значений S, удовлетворяющих следующему условию:
Для остальных значений S выигрывает первый игрок.