Similar presentations:
Десятая Всероссийская командная олимпиада школьников по программированию
1. Десятая Всероссийская командная олимпиада школьников по программированию
Разбор задач14 ноября 2009 года
Санкт-Петербург
2. Задача A. Поедание сыра
23. Авторы задачи
Автор задачи — Сергей МельниковУсловие — Андрей Станкевич
Подготовка тестов — Антон Ахи
Разбор — Сергей Мельников
4. Общая идея
Используем двоичный поиск по ответуДано t, можно ли организовать
поедание сыра, чтобы мыши не ели сыр
более чем через t часов, после того как
сыр начал портится
Обозначим Di = di + t
5. Интересные интервалы
Пусть Ti – все моменты времени ri и DiT1 < T2 < … < Tn
Время разбивается на интервалы
[Ti, Ti+1]
Сыр или можно есть в течение всего
интервала, или нельзя
6. Скорости всех мышей равны 1
Рассмотрим сетьРебро из cыра i в
интервал k, если
В ней надо найти
этот сыр можно есть
максимальный поток
в этот интервал
Можно,
если все
Сыр 1
I1
m
рёбра из s
·|I1
1
p
...
|
...
насыщены
s
pi
pn
Сыр i
|Ik|
Ik
...
...
Сыр n
Ir
m·|Ik|
|Ir|
·
m
t
7. Скорости всех мышей равны 1
Три сыраp1=1 r1=2 d1=2
p2=3 r2=1 d2=4
p3=2 r3=2 d3=4
s
Две мыши
Сыр
Интервалы
времени I
R=1
D=2
1
1
3
[1..2]
R=1
D=4
1
t
2
2
4
[2..4]
R=2
D=4
2
2
8. Разные скорости мышей
Упорядочим мышей по неубываниюскоростей:
s1 ≥ s2 ≥ … ≥ sm
Представим (m-1)-ю мышь, как набор из
мыши со скоростью sm, и мыши со
скоростью sm-1-sm
Аналогично разобьем (m-2)-ю мышь на 3
три мыши: sm, sm-1-sm и sm-2-sm-1
И так далее
9. Модификация сети
Раньшебыло
Сыр 1
K1,k
Сыр 1
...
Сыр i
Заменим, на такой
фрагмент
|Ik|
Ik
...
...
...
Сыр i
(sj-sj+1)|Ik|
Kj,k
j(sj-sj+1)|Ik|
(sm
...
Ik
|
)
-0
...
Сыр n
Сыр n
1(
|
I
|
)
s2
1(s
k
-0)
|Ik|
s1-
s2)
|Ik|
Ik
|
sm
(
m
Km,k
Kj,k – одни и те же разных i и одного Ik
10. Общее решение
Двоичный поискПоток в специальной сети
11. Спасибо за внимание! Вопросы по задаче A?
12. Задача B. Соревнования по программированию
1213. Авторы задачи
Автор задачи — Владимир УльянцевУсловие — Федор Царев
Подготовка тестов — Антон Ахи
Разбор — Антон Ахи
14. О чем задача?
Дан список файлов и определения длякаталогов с тестами, задач и описаний
соревнований
Необходимо посчитать количество
описаний соревнаваний
15. Как решать?
Востановить полностью деревокаталогов и файлов
Использовать символ «\» как
разделитель имен в путях
Для каждого каталога хранить список
подкаталогов и файлов в нем,
например с помощью хеш-таблицы
16. Как посчитать количество описаний соревнований?
В получившемся деревефайлов/каталогов проверить про
каждый каталог, является ли он
каталогом с тестами, задачей или
описанием соревнований
Не зыбыть, что в каталоге с тестами
могут быть подкаталоги
17. Сколько работает?
Во входном файле задано не более100000 файлов/каталогов
Каждый каталог просматривается один
раз
18. Спасибо за внимание! Вопросы по задаче B?
19. Задача C. Распил
1920. Авторы задачи
Авторы задачи — Елена Андреева,Владимир Гуровиц
Условие — Андрей Станкевич
Подготовка тестов — Антон Банных
Разбор — Антон Банных
21. О чем задача?
Придумать n-угольник, который можнораспилить на k-угольник и m-угольник
разрезом, проходящим через две его
вершины.
22. Какие n, m, k допустимы?
Если m k n {0..4}, решения нет.Иначе при достаточно больших n, m, k
искомый многоугольник существует.
23. m + k = n
m+k=n24. m + k = n + 1
m+k=n+125. m + k = n + 2
m+k=n+226. m + k = n + 3
m+k=n+327. m + k = n + 4
m+k=n+428. m + k = n + 4, k < 5 Дополнительный случай
m + k = n + 4, k < 5Дополнительный случай
29. Спасибо за внимание! Вопросы по задаче C?
30. Задача D. Электричество
3031. Авторы задачи
Автор задачи — Владимир ГуровицУсловие — Федор Царев
Подготовка тестов — Сергей Поромов
Разбор — Антон Банных
32. О чем задача?
В наличии:сетевых фильтров
n элетроприборов
1 розетка
k
Требуется подсоединить все
элетроприборы так, чтобы потребляемая
ими мощность не превышала допустимую
для сетевого фильтра.
К сетевому фильтру можно подсоединить
не более одного сетевого фильтра.
33. Основные идеи
Не имеет смысла поключать фильтр кфильтру с меньшей максимальной
нагрузкой.
Наиболее мощные приборы имеет
смысл ставить ближе к розетке.
34. Решение
Отсортировать электроприборы ифильтры в порядке невозрастания
мощностей.
Строить ответ жадно, начиная с
фильтра, подключенного к розетке.
35. Спасибо за внимание! Вопросы по задаче D?
36. Задача E. Адронные коллайдеры
3637. Авторы задачи
Автор задачи — Михаил КеверУсловие — Федор Царев
Подготовка тестов — Сергей Поромов
Разбор — Сергей Мельников
38. Две окружности
Две окружности: найдемокружность с центром на
прямой, соединяющей
центры исходных
окружностей
A
B
O1
0
O1D DO2 O1O2
2
2
2
2
2
O1D O1 A AD DO2 AO2
2
2
O2 D O1O2 O1 A2
O1D
2O1O2
D
O2
39. Две окружности
Для любой точки Сна перпендикуляре
восстановленном в
точке D –
существует
окружность
являющаяся
решением
M
C
A
B
`N
O1
D
O2
40. Три окружности
Три окружности:Построим прямую на которой может быть
центр окружности делящей пополам O1 и O2
Построим прямую на которой может быть
центр окружности делящей пополам O2 и O3
Найдем их точку пересечения - X
41. Три окружности
O3X
O1
D
O2
42. Спасибо за внимание! Вопросы по задаче E?
43. Задача F. Космические захватчики
4344. Авторы задачи
Автор задачи — Георгий КорнеевУсловие — Павел Маврин
Подготовка тестов — Антон Банных
Разбор — Антон Ахи
45. О чем задача?
В столбцах находятся ai захватчиковПушка за одно действие либо
перемещается в соседний столбец,
либо производит выстрел и убивает
одного захватчика
Необходимо уничтожить всех
захватчиков за минимальное
количество действий
46. Частный случай
Если пушка стоит в крайнем столбце, тонужно уничтожить всех захватчиков в
этом столбце и перейти к следующему
Ответ — сумма общего количества
захватчиков и количества
перемещений, то есть Sai+(n-1)
47. Решение
Дойти до ближайшего из краев, далеедействовать по предыдущему плану
Ответ — Sai+(n-1)+min(p-1,n-p)
48. Спасибо за внимание! Вопросы по задаче F?
49. Задача G. Пробежки по Манхэттену
4950. Авторы задачи
Автор задачи — Михаил ДворкинУсловие — Павел Маврин
Подготовка тестов — Олег Давыдов
Разбор — Михаил Дворкин
50
51. О чем задача?
Объект передвигается по Манхэттену,пробегая за t минут не более чем
t кварталов.
Каждые t минут навигатор сообщает
точку, где находится объект,
с точностью до d кварталов.
Где может находиться объект в данный
момент времени?
51
52. Утверждение
В каждый момент времени множествоточек, в которых может находиться объект,
составляют прямоугольник, стороны
которого повернуты на 45° относительно
осей координат.
52
53. В начальный момент времени
Это точка (0, 0) —вырожденный прямоугольник.
53
54. За t минут…
Объект можетпройти не более
t кварталов.
Прямоугольник
«расширяется во
все стороны на t»
54
55. Данные от навигатора…
Сообщают, в какомквадрате может
находиться объект.
Пересечем
прямоугольник и
квадрат
(с параллельными
осями) — получим
новый
прямоугольник.
55
56. Спасибо за внимание! Вопросы по задаче G?
57. Задача H. Следующее разбиение на слагаемые
5758. Авторы задачи
Автор задачи — Андрей СтанкевичУсловие — Андрей Станкевич
Подготовка тестов — Сергей Мельников
Разбор — Сергей Мельников
58
59. Генерация следующего комбинаторного объекта
Дано разбиение5=1+1+3
Идём с конца, пока нельзя увеличить
слагаемое
Увеличим слагаемое на минимальную
величину
Допишем минимальный «хвост»
59
60. Когда можно увеличить слагаемое?
Первое слагаемое с конца нельзяувеличить
Второе слагаемое с конца можно
увеличить
Например
можно прибавить к нему
последнее слагаемое
5=1+1+3 → 5=1+4
60
61. На сколько можно увеличить слагаемое?
Слагаемое можно увеличить на 1, еслионо было меньше последнего хотя бы
на 2
5=1+1+3
→ 5=1+2+2
Иначе его надо увеличить на величину
последнего слагаемого
5=1+2+2
→ 5=1+4
61
62. Минимальный «хвост»?
Надо вывести хвост с суммой S, приэтом последнее слагаемое которое
было выведено перед ним равно K
Выведем несколько(возможно ноль)
слагаемых K, а затем остаток
Остаток должен быть не меньше чем K
62
63. Спасибо за внимание! Вопросы по задаче H?
64. Задача I. Самодвойственный документ
6465. Авторы задачи
Автор задачи — Сергей МельниковУсловие — Андрей Станкевич
Подготовка тестов — Сергей Мельников
Разбор — Сергей Мельников
65
66. Условие задачи
В задаче надо построить граф из nвершин
Первый отдел: пары чисел – это ребра
графа
Второй отдел: пары чисел – это
вершины между которыми ребра нет
Граф изоморфен своему дополнению
66
67. Когда ответ существует?
В полном графе из n вершин n(n - 1)/2ребер
Если n = 4k + 2 или n = 4k + 3, то ребер
нечетное число – ответ «No»
Если n = 4k или n = 4k + 1, то ответ «Yes»
67
68. 4k вершин
4 вершины4k вершин – заменить вершины 2 и 3 на
полные графы, 1 и 4 – на пустые
68
69. 12 вершин
6970. 4k + 1 вершина
5 вершин4k+1 вершина – заменить вершины 2 и
3 на полные графы, 1 и 4 – на пустые
70
71. 13 вершин
7172. Спасибо за внимание! Вопросы по задаче I?
73. Задача J. Цирковое шоу
7374.
Авторы задачиАвтор задачи — Юрий Петров
Условие — Павел Маврин
Подготовка тестов — Юрий Петров
Разбор — Юрий Петров
75.
ФормулировкаДан набор отрезков
Выбрать два поднабора, объединения
которых не пересекаются
Максимизировать минимум размеров
76.
Идея решенияДинамическое программирование
77.
Решение: вычисляемаяфункция
Функция f(a, n, t):
a — самый правый из отрезков, взятых в
один из наборов
n — текущее количество отрезков в
первом наборе
t — какому набору принадлежит отрезок a
Значение — максимальное количество
отрезков во втором наборе
78.
Решение: переходыПеребрать отрезок b, который будет
завершать следующую группу
Перебрать набор, в который взять эту
группу
Все отрезки, лежащие правее конца a и
левее конца b, выгодно взять в тот же
набор
79.
Оценка времени работыВсего есть n×n×2 состояний
Из каждого O(n) переходов
Переходы перебирать в порядке
возрастания конца отрезка
Суммарное время обработки переходов
из одного состояния O(n)
Итоговое время O(n3)
80. Спасибо за внимание! Вопросы по задаче J?
81. Задача K. Красивая таблица результатов
8182. Авторы задачи
Автор задачи — Владимир УльнцевУсловие — Андрей Станкевич
Подготовка тестов — Владимир Ульянцев
Разбор — Антон Ахи
82
83. О чем задача?
Таблица результатов считаетсякрасивой, если количество задач,
решенных каждой из команд, либо 0,
либо делитель числа задач на
соревновании
Сколько еще можно сдать задач, чтобы
таблица не переставала быть красивой
83
84. Как решать?
Для каждой команды увеличивать количествосданных ею задач, пока это не изменяет
красоту таблицы результатов
У количества задач на соревновании не может
быть более 24 подряд идущих делителей, так
как минимальное число, которое делится на
все числа от 1 до 24 это ― 5354228880
84