Download ppt - Разбор задач

Transcript
Page 1: Разбор задач

Разбор задач1 тура школьного этапа

Кормышов Михаил http://krasprog.ru

Page 2: Разбор задач

Задача А. Хоккей

Условие Сколько существует вариантов распределения комплекта медалей?

Ограничения N < 104 + 1

Page 3: Разбор задач

Задача А. Хоккей

Решение

Золотые медали могла получить любая из N команд. Серебряные – любая из оставшихся, то есть N-1 вариант. Бронзовые – N-2 команды.

Итого: N*(N-1)*(N-2)

Page 4: Разбор задач

Задача А. Хоккей

Особые случаи При N = 1 ответ 1 При N = 2 ответ 2

Page 5: Разбор задач

Задача В. Игра со спичками

Условие Можно брать одну, две или тысячу спичек. Выигрывает последний. Кто выиграет при N спичках?

Ограничения N < 104 + 1

Page 6: Разбор задач

Задача В. Игра со спичками

Идея решения Воспользуемся теорией игр. Будем отмечать “+” выигрышные состояния, а “-” - проигрышные.

Состояние с 0 спичек является для игрока проигрышным, так как его соперник уже выиграл на прошлом ходе, забрав последние спички.

Page 7: Разбор задач

Задача В. Игра со спичками

Отмечаем состояние знаком “+”, если существует хотя бы один ход, ведущий в состояние “-”. Так как он заставит противника капитулировать. В противном случае отмечаем состояние знаком “-”.

Page 8: Разбор задач

Задача В. Игра со спичками

Учитывая ограничения, можно реализовать

этот алгоритм. Но нетрудно заметить закономерность, что в

состояниях, кратных 3, стоит “-”. Обязательно необходимо проверить её и для больших чисел, когда можно будет брать по 1000 спичек.

0 1 2 3 4 5 6 7 8 9 10

- + + - + + - + + - +

Page 9: Разбор задач

Задача В. Игра со спичками

Решение

cin >> n; cout << (n%3 ? 1 : 2);

Page 10: Разбор задач

Задача С. Счастливые числа

Условие Найти количество чисел, состоящих из 4 и 7, не превосходящих N.

Ограничение N < 1032 + 1

Page 11: Разбор задач

Задача С. Счастливые числа

Идея решения Динамика по цифрам числа, начиная с младших разрядов. Будем считать количество счастливых чисел, если использовано ровно j младших разрядов.

Page 12: Разбор задач

Задача С. Счастливые числа

Пусть очередная цифра = Cj, ответ = R

j. Тогда:

Cj < 4, то R

j = 0

Cj = 4, то R

j = R

j-1

Cj > 4 and C

j < 7, то R

j = 2j-1

Cj = 7, то R

j = R

j-1 + 2j-1

Cj > 7, то R

j = 2j

Page 13: Разбор задач

Задача D. Перетягивание каната

Условие Дан граф из N вершин. Разделить вершины на две группы, чтобы количество рёбер между вершинами одной группы было максимально.

Ограничение N < 25

Page 14: Разбор задач

Задача D. Перетягивание каната

Идея решения Учитывая сильные ограничения на N. Решать задачу можно перебором всех вариантов. Всего количество вариантов = 2N. Это укладывается в ограничения, но для каждого из них необходимо посчитать сплочённость, итого получаем O(N2 2N)

Page 15: Разбор задач

Задача D. Перетягивание каната

Оптимизация Пересчёт сплочённости можно выполнять за O(N), если перебор вести в порядке кодов Грея. Это пройдёт на хорошем сервере, но только не на acmp.

Page 16: Разбор задач

Задача D. Перетягивание каната

Решение Для полного решения воспользуемся рекурсивным перебором с отсечением.

void rec(int a, int k); где a – номер текущей вершины, k – количество человек в группе.

Page 17: Разбор задач

Спасибо за внимание

Ваши вопросы?


Recommended