Десятая Всероссийская командная олимпиада школьников по программированию
Задача A. Поедание сыра
Авторы задачи
Общая идея
Интересные интервалы
Скорости всех мышей равны 1
Скорости всех мышей равны 1
Разные скорости мышей
Модификация сети
Общее решение
Спасибо за внимание! Вопросы по задаче A?
Задача B. Соревнования по программированию
Авторы задачи
О чем задача?
Как решать?
Как посчитать количество описаний соревнований?
Сколько работает?
Спасибо за внимание! Вопросы по задаче B?
Задача C. Распил
Авторы задачи
О чем задача?
Какие n, m, k допустимы?
m + k = n
m + k = n + 1
m + k = n + 2
m + k = n + 3
m + k = n + 4
m + k = n + 4, k < 5 Дополнительный случай
Спасибо за внимание! Вопросы по задаче C?
Задача D. Электричество
Авторы задачи
О чем задача?
Основные идеи
Решение
Спасибо за внимание! Вопросы по задаче D?
Задача E. Адронные коллайдеры
Авторы задачи
Две окружности
Две окружности
Три окружности
Три окружности
Спасибо за внимание! Вопросы по задаче E?
Задача F. Космические захватчики
Авторы задачи
О чем задача?
Частный случай
Решение
Спасибо за внимание! Вопросы по задаче F?
Задача G. Пробежки по Манхэттену
Авторы задачи
О чем задача?
Утверждение
В начальный момент времени
За t минут…
Данные от навигатора…
Спасибо за внимание! Вопросы по задаче G?
Задача H. Следующее разбиение на слагаемые
Авторы задачи
Генерация следующего комбинаторного объекта
Когда можно увеличить слагаемое?
На сколько можно увеличить слагаемое?
Минимальный «хвост»?
Спасибо за внимание! Вопросы по задаче H?
Задача I. Самодвойственный документ
Авторы задачи
Условие задачи
Когда ответ существует?
4k вершин
12 вершин
4k + 1 вершина
13 вершин
Спасибо за внимание! Вопросы по задаче I?
Задача J. Цирковое шоу
Спасибо за внимание! Вопросы по задаче J?
Задача K. Красивая таблица результатов
Авторы задачи
О чем задача?
Как решать?
Спасибо за внимание! Вопросы?
5.32M
Category: programmingprogramming

Десятая Всероссийская командная олимпиада школьников по программированию

1. Десятая Всероссийская командная олимпиада школьников по программированию

Разбор задач
14 ноября 2009 года
Санкт-Петербург

2. Задача A. Поедание сыра

2

3. Авторы задачи

Автор задачи — Сергей Мельников
Условие — Андрей Станкевич
Подготовка тестов — Антон Ахи
Разбор — Сергей Мельников

4. Общая идея

Используем двоичный поиск по ответу
Дано t, можно ли организовать
поедание сыра, чтобы мыши не ели сыр
более чем через t часов, после того как
сыр начал портится
Обозначим Di = di + t

5. Интересные интервалы

Пусть Ti – все моменты времени ri и Di
T1 < 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. Соревнования по программированию

12

13. Авторы задачи

Автор задачи — Владимир Ульянцев
Условие — Федор Царев
Подготовка тестов — Антон Ахи
Разбор — Антон Ахи

14. О чем задача?

Дан список файлов и определения для
каталогов с тестами, задач и описаний
соревнований
Необходимо посчитать количество
описаний соревнаваний

15. Как решать?

Востановить полностью дерево
каталогов и файлов
Использовать символ «\» как
разделитель имен в путях
Для каждого каталога хранить список
подкаталогов и файлов в нем,
например с помощью хеш-таблицы

16. Как посчитать количество описаний соревнований?

В получившемся дереве
файлов/каталогов проверить про
каждый каталог, является ли он
каталогом с тестами, задачей или
описанием соревнований
Не зыбыть, что в каталоге с тестами
могут быть подкаталоги

17. Сколько работает?

Во входном файле задано не более
100000 файлов/каталогов
Каждый каталог просматривается один
раз

18. Спасибо за внимание! Вопросы по задаче B?

19. Задача C. Распил

19

20. Авторы задачи

Авторы задачи — Елена Андреева,
Владимир Гуровиц
Условие — Андрей Станкевич
Подготовка тестов — Антон Банных
Разбор — Антон Банных

21. О чем задача?

Придумать n-угольник, который можно
распилить на k-угольник и m-угольник
разрезом, проходящим через две его
вершины.

22. Какие n, m, k допустимы?

Если m k n {0..4}, решения нет.
Иначе при достаточно больших n, m, k
искомый многоугольник существует.

23. m + k = n

m+k=n

24. m + k = n + 1

m+k=n+1

25. m + k = n + 2

m+k=n+2

26. m + k = n + 3

m+k=n+3

27. m + k = n + 4

m+k=n+4

28. m + k = n + 4, k < 5 Дополнительный случай

m + k = n + 4, k < 5
Дополнительный случай

29. Спасибо за внимание! Вопросы по задаче C?

30. Задача D. Электричество

30

31. Авторы задачи

Автор задачи — Владимир Гуровиц
Условие — Федор Царев
Подготовка тестов — Сергей Поромов
Разбор — Антон Банных

32. О чем задача?

В наличии:
сетевых фильтров
n элетроприборов
1 розетка
k
Требуется подсоединить все
элетроприборы так, чтобы потребляемая
ими мощность не превышала допустимую
для сетевого фильтра.
К сетевому фильтру можно подсоединить
не более одного сетевого фильтра.

33. Основные идеи

Не имеет смысла поключать фильтр к
фильтру с меньшей максимальной
нагрузкой.
Наиболее мощные приборы имеет
смысл ставить ближе к розетке.

34. Решение

Отсортировать электроприборы и
фильтры в порядке невозрастания
мощностей.
Строить ответ жадно, начиная с
фильтра, подключенного к розетке.

35. Спасибо за внимание! Вопросы по задаче D?

36. Задача E. Адронные коллайдеры

36

37. Авторы задачи

Автор задачи — Михаил Кевер
Условие — Федор Царев
Подготовка тестов — Сергей Поромов
Разбор — Сергей Мельников

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. Три окружности

O3
X
O1
D
O2

42. Спасибо за внимание! Вопросы по задаче E?

43. Задача F. Космические захватчики

43

44. Авторы задачи

Автор задачи — Георгий Корнеев
Условие — Павел Маврин
Подготовка тестов — Антон Банных
Разбор — Антон Ахи

45. О чем задача?

В столбцах находятся ai захватчиков
Пушка за одно действие либо
перемещается в соседний столбец,
либо производит выстрел и убивает
одного захватчика
Необходимо уничтожить всех
захватчиков за минимальное
количество действий

46. Частный случай

Если пушка стоит в крайнем столбце, то
нужно уничтожить всех захватчиков в
этом столбце и перейти к следующему
Ответ — сумма общего количества
захватчиков и количества
перемещений, то есть Sai+(n-1)

47. Решение

Дойти до ближайшего из краев, далее
действовать по предыдущему плану
Ответ — Sai+(n-1)+min(p-1,n-p)

48. Спасибо за внимание! Вопросы по задаче F?

49. Задача G. Пробежки по Манхэттену

49

50. Авторы задачи

Автор задачи — Михаил Дворкин
Условие — Павел Маврин
Подготовка тестов — Олег Давыдов
Разбор — Михаил Дворкин
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. Следующее разбиение на слагаемые

57

58. Авторы задачи

Автор задачи — Андрей Станкевич
Условие — Андрей Станкевич
Подготовка тестов — Сергей Мельников
Разбор — Сергей Мельников
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. Самодвойственный документ

64

65. Авторы задачи

Автор задачи — Сергей Мельников
Условие — Андрей Станкевич
Подготовка тестов — Сергей Мельников
Разбор — Сергей Мельников
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 вершин

69

70. 4k + 1 вершина

5 вершин
4k+1 вершина – заменить вершины 2 и
3 на полные графы, 1 и 4 – на пустые
70

71. 13 вершин

71

72. Спасибо за внимание! Вопросы по задаче I?

73. Задача J. Цирковое шоу

73

74.

Авторы задачи
Автор задачи — Юрий Петров
Условие — Павел Маврин
Подготовка тестов — Юрий Петров
Разбор — Юрий Петров

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. Красивая таблица результатов

81

82. Авторы задачи

Автор задачи — Владимир Ульнцев
Условие — Андрей Станкевич
Подготовка тестов — Владимир Ульянцев
Разбор — Антон Ахи
82

83. О чем задача?

Таблица результатов считается
красивой, если количество задач,
решенных каждой из команд, либо 0,
либо делитель числа задач на
соревновании
Сколько еще можно сдать задач, чтобы
таблица не переставала быть красивой
83

84. Как решать?

Для каждой команды увеличивать количество
сданных ею задач, пока это не изменяет
красоту таблицы результатов
У количества задач на соревновании не может
быть более 24 подряд идущих делителей, так
как минимальное число, которое делится на
все числа от 1 до 24 это ― 5354228880
84

85. Спасибо за внимание! Вопросы?

http://neerc.ifmo.ru/school
English     Русский Rules