Олимпиадный тренинг

Задача . Демо к зачету по мотивам 19-21


Задача

Темы:
Глоссарий :
Описание игры:
Два игрока, Петя и Ваня, играют в игру с одной кучей камней.
Игра организована по следующим правилам:
  • Игроки ходя поочередно. Первый ход всегда делает Петя;
  • Каждый ход игрок может увеличить количество камней в куче одим из перечисленных способов:
    • на a камней;
    • на b камней;
    • ровно на 50% процентов, если это возможно;  
    • в d раз;
  • Игра завершается когда количество камней в куче становится не менее N.
    При этом считается, что игрок сделал ход в вершину/позицию "Win".
  • Победителем объявляется игрок, достигший вершины/позиции "Win" (сделавшй последний/победный  ход)
  • В начальный момент времени в куче может находиться S камней ( 1 ≤ S ≤ N-1)
  • Гарантируется, что для любой стартовой позиции есть игрок (Петя или Ваня) у которого существует выигрышная стратегия.
Задание:  По описанию игры построить "граф игры". Определить следующие характеристики построенного графа:
  • Количество вершин, имеющих раскраску в "цвета Пети", сумму степеней этих вершин;
  • Список вершин, имеющих раскраску в "цвета Вани", в порядке возрастания их номеров
  • Определить самую длинную (по количеству ходов) траекторию развития игры. Если таких несколько, то вывести "наименьшую в лексико-графическом смысле". 
Напишите программу, решающую поставленную задачу.
Входные данные:
 Одна строка  со значения N, a, b, d (1 ≤ a, b, N ≤ 1000, 1<d<100 )
Выходные данные:
1 строка: Количество вершин, имеющих раскраску в "цвета Пети", сумму степеней этих вершин (два числа через пробел);
2 строка: Список вершин, имеющих раскраску в "цвета Вани", в порядке возрастания их номеров (в строку, через пробел)
3 строка: Траектория максимальной длины - последовательность вершин, составляющих тракеторию игры. 
                Если таких несколько, то вывести "наименьшую в лексико-графическом порядке" (вершины сравниваются как числа) 
               (в строку, через пробел, последняя вершина должна иметь название "Win" )
Пример
Входные данные                      Выходные данные      Пояснения
16 1 3 2 11 13
1 3 5 7
1 2 3 4 5 6 7 8 Win
1 строка ответа:
В "цвета Пети" раскрашены вершины 2,4,6,8-15.
Из вершин 8-15 Петя должен сразу перейти вершину "Win".
Из вершины "6" Петя обязан перейти в вершину "7".
Из вершины "4" Петя, сохраняя ВС может перейти в вершины "4", "7"
Из вершины "2" Петя, сохраняя ВС может перейти в вершины "3", "5"
2 строка ответа:
В "цвета Вани" раскрашены вершины 1,3,5,7
3 строка ответа:
Максимальная траектория игры может содержать  9 вершин (включая  вершину "Win").
Таких траекторий три:
1 2 3 4 5 6 7 8 Win
1 2 3 4 5 6 7 10 Win
1 2 3 4 5 6 7 14 Win
в ответе указана наименьшая в лексико-графическом порядке
 граф игры
51 3 5 2 38 47
1 3 5 7 9 11 13 15 17 23 24 25
1 2 3 6 9 12 15 18 23 26 Win
 


Рекомендации по решению:
  • используя принцип BFS, сделать раскраску вершин.
  • построить словарь/список компонентов смежности для "графа игры" 
  • используя принцип DFS, найти максимальную траекторию.
    Поиск траектории можно упростить, если "развернуть"  граф игры, то есть изменить в нем направление всех ребер.
    Получиться дерево с одним истоком в вершине "Win", в котором используя DFS несложно найти путь максимальной длины.

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
Python8
Комментарий учителя