XVIII Командная олимпиада школьников СанктПетербурга по информатике и программированию. Разбор задач презентация

Содержание

Слайд 2

Задача A
Бактерии

Задача A Бактерии

Слайд 3

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

Антон Ахи

Автор задачи – Михаил Дворкин Условие – Михаил Дворкин Подготовка тестов – Сергей

Слайд 4

Постановка задачи

Дано целое число n
За один шаг можно:
Разделить n на любой его простой

делитель
Возвести число n в квадрат
Требуется за минимальное число шагов получить число m

Постановка задачи Дано целое число n За один шаг можно: Разделить n на

Слайд 5

Идея решения

Определить, возможно ли получить m
Разложить m на простые делители
Если хотя бы один

из них не является делителем n, то ответ «Impossible»

Идея решения Определить, возможно ли получить m Разложить m на простые делители Если

Слайд 6

Нахождение решения

Рассмотреть задачу с конца ― получить из m число n, если разрешены

операции:
Извлечь корень
Домножить на произвольное простое число

Нахождение решения Рассмотреть задачу с конца ― получить из m число n, если

Слайд 7

Решение

Разложить оба числа на простые множители
Пока существует простой делитель, который входит в m

в большей степени, чем в n, доводим каждый простой делитель m до четной степени и извлекаем корень
Домножаем на оставшиеся простые

Решение Разложить оба числа на простые множители Пока существует простой делитель, который входит

Слайд 8

Почему это работает?

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

лишь при условии четности всех степеней
Перед любым извлечением корня невыгодно увеличивать показатель более чем на один

Почему это работает? Единственный способ уменьшить показатель простого делителя ― извлечение корня, которое

Слайд 9

Задача B
Шахматная
головоломка

Задача B Шахматная головоломка

Слайд 10

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

Антон Ахи

Автор задачи – Виталий Аксенов Условие – Сергей Поромов Подготовка тестов – Владимир

Слайд 11

Условие задачи

Дано расположение коня на доске
Требуется поставить ладью и слона на доску, чтобы

они били коня, но не били друг друга

Условие задачи Дано расположение коня на доске Требуется поставить ладью и слона на

Слайд 12

Как решать?

Если слон или ладья бьют коня, то конь их не бьет
Позиций на

доске мало
Переберем все возможные позиции ладьи и слона, из которых они бьют коня
Проверим, что поставленные фигуры не бьют друг друга

Как решать? Если слон или ладья бьют коня, то конь их не бьет

Слайд 13

Интересные клетки

Ладья бьет все поля в том же столбце или строке
Слон бьет все

поля с такой же разницей номеров строки и столбца

Интересные клетки Ладья бьет все поля в том же столбце или строке Слон

Слайд 14

Задача C
Шоколад

Задача C Шоколад

Слайд 15

Автор задачи – Виталий Аксенов
Условие – Антон Ахи
Подготовка тестов – Нияз Нигматуллин
Разбор –

Сергей Поромов

Автор задачи – Виталий Аксенов Условие – Антон Ахи Подготовка тестов – Нияз

Слайд 16

О чем задача?

О чем задача?

Слайд 17

Как решать?

Перебрать всевозможные вертикальные и горизонтальные разрезы
Проверить, можно ли хоть один из них

провести: с разных сторон от разреза должны быть различные дольки, то есть различные числа

Как решать? Перебрать всевозможные вертикальные и горизонтальные разрезы Проверить, можно ли хоть один

Слайд 18

Задача D
Луна

Задача D Луна

Слайд 19

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

Сергей Поромов

Автор задачи – Юрий Петров Условие – Юрий Петров Подготовка тестов – Владимир

Слайд 20

О чем задача?

Необходимо найти луну на фотографии

О чем задача? Необходимо найти луну на фотографии

Слайд 21

Как решать?

Ограничения небольшие – можно и достаточно проверить всевозможные положения и размеры луны,

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

Как решать? Ограничения небольшие – можно и достаточно проверить всевозможные положения и размеры

Слайд 22

Как проверить луну?

Проверить, что все точки фотографии на расстоянии не более радиуса от

центра луны белые
Расстояние можно считать в целых числах:
Проверка работает за O(w·h).

Как проверить луну? Проверить, что все точки фотографии на расстоянии не более радиуса

Слайд 23

Задача E
Ожерелье

Задача E Ожерелье

Слайд 24

Автор задачи – Михаил Дворкин
Условие – Сергей Поромов
Подготовка тестов – Нияз Нигматуллин
Разбор –

Сергей Мельников

Автор задачи – Михаил Дворкин Условие – Сергей Поромов Подготовка тестов – Нияз

Слайд 25

Как решать?

Ожерелий из двух, трех, четырех и пяти жемчужин нет
Для остальных возьмем ожерелье

1 1 0 1 0 … 0
Оно подходит, так как ось может проходить лишь через 1, но все такие оси не являются осями симметрии

- 1

Как решать? Ожерелий из двух, трех, четырех и пяти жемчужин нет Для остальных

Слайд 26

Альтернативное решение

Генерируем случайное ожерелье
Проверяем, есть ли ось симметрии

Альтернативное решение Генерируем случайное ожерелье Проверяем, есть ли ось симметрии

Слайд 27

Задача F
Гонки

Задача F Гонки

Слайд 28

Автор задачи – жюри олимпиады
Условие – Антон Банных
Подготовка тестов – Виталик Аксенов
Разбор –

Сергей Мельников

Автор задачи – жюри олимпиады Условие – Антон Банных Подготовка тестов – Виталик

Слайд 29

За какое время проедет машина?

Проедет x div (tv) целых сегментов длинной tv, сделает

между ними
x div (tv) – 1 зарядок батарей
Если x mod (tv) не 0, то надо проехать ещё, а для этого зарядить батарею
Таким образом, число зарядок: ceil(x / (tv)) – 1
Остальное время едет со скоростью v

За какое время проедет машина? Проедет x div (tv) целых сегментов длинной tv,

Слайд 30

Как решать?

Время для одной машины
x / v + (ceil(x / (tv)) – 1)

* t
Сравнить время, за которое машины достигнут финиша

Как решать? Время для одной машины x / v + (ceil(x / (tv))

Слайд 31

Задача G
Робот

Задача G Робот

Слайд 32

Автор задачи – Михаил Дворкин
Условие – Михаил Дворкин
Подготовка тестов – Алексей Цыпленков
Разбор –

Алексей Цыпленков

Автор задачи – Михаил Дворкин Условие – Михаил Дворкин Подготовка тестов – Алексей

Слайд 33

О чем задача

Робот переместился из начала координат в точку A(x, y), при этом

робот поворачивал только на 90 градусов направо или налево
Дана последовательность поворотов
Определить длины отрезков пути робота или некорректность пути

О чем задача Робот переместился из начала координат в точку A(x, y), при

Слайд 34

Как решать?

Длина каждого отрезка пути не меньше 1 и не больше 106
Для каждого

направления (вверх, вниз, вправо, влево) найдем, есть ли отрезок пути робота, на котором он движется по этому направлению

Как решать? Длина каждого отрезка пути не меньше 1 и не больше 106

Слайд 35

Пусть робот попадет в точку B, если всегда будет смещаться на 1
Чтобы попасть

из В в А, нужно дополнительно сместиться на вектор А – В
Разложим вектор А – В по направлениям:
(все числа k1, k2, k3, k4 неотрицательны и не менее двух были равны нулю)

Пусть робот попадет в точку B, если всегда будет смещаться на 1 Чтобы

Слайд 36

Если все направления, коэффициенты при которых не равны 0, были найдены в пути

робота, то ответ существует и строится следующим образом:
Длины всех отрезков принять за 1
Для каждого направления с ненулеывм k взять один произвольный отрезок движения по этому направлению и увеличить его длину на k

Если все направления, коэффициенты при которых не равны 0, были найдены в пути

Слайд 37

Если какого-то направления с ненулевым k нет в пути, то ответа не существует

А

B

Если какого-то направления с ненулевым k нет в пути, то ответа не существует А B

Слайд 38

Задача H
Санта

Задача H Санта

Слайд 39

Автор задачи – Виталий Аксенов
Условие – Сергей Мельников
Подготовка тестов – Алексей Цыпленков
Разбор –

Алексей Цыпленков

Автор задачи – Виталий Аксенов Условие – Сергей Мельников Подготовка тестов – Алексей

Слайд 40

О чем задача

Даны два списка из K и М натуральных чисел, каждое не

больше N. Найти все числа от 1 до N, которых нет в этом списке.
Каждое числе встречается в списках не более одного раза.

О чем задача Даны два списка из K и М натуральных чисел, каждое

Слайд 41

Как решать?

Так как каждое число встречается в списках не более одного раза, то

количество чисел, которых нет в списке, равно N – K
Так как N невелико, то за один линейный проход по спискам можно отметить все числа, которые в них есть
За линейный проход по массиву пометок вывести все числа, которых нет

Как решать? Так как каждое число встречается в списках не более одного раза,

Слайд 42

Задача I.
Подстрока

Задача I. Подстрока

Слайд 43

Автор задачи – Антон Банных
Условие – Антон Банных
Подготовка тестов – Антон Банных
Разбор –

Антон Банных

Автор задачи – Антон Банных Условие – Антон Банных Подготовка тестов – Антон

Слайд 44

Решение

Ахо-Корасик
Строка abc
Запросы:
2 3 bc
2 3 abc

Решение Ахо-Корасик Строка abc Запросы: 2 3 bc 2 3 abc

Слайд 45

Решение

Для каждого префикса строки запишем, в какой вершине автомата мы оказались
а – 3
ab

– 4
abc - 5

Решение Для каждого префикса строки запишем, в какой вершине автомата мы оказались а

Слайд 46

Решение

Рассмотрим дерево, образованное суффиксными ссылками

Решение Рассмотрим дерево, образованное суффиксными ссылками

Слайд 47

Решение

Для каждого запроса нужно определить, встречалась ли вершина из соответствующего поддерева в отрезке

Решение Для каждого запроса нужно определить, встречалась ли вершина из соответствующего поддерева в отрезке

Слайд 48

Решение

Перенумеруем вершины в порядке выхода из обхода в глубину

Решение Перенумеруем вершины в порядке выхода из обхода в глубину

Слайд 49

Вершины одного поддерева имеют последовательные номера
Пусть пара (префикс, номер вершины) — точка
Запрос —

есть ли точка в прямоугольнике

Решение

Вершины одного поддерева имеют последовательные номера Пусть пара (префикс, номер вершины) — точка

Слайд 50

Решение

Двумерное дерево отрезков — O(n log n)
Одномерное дерево отрезков на сумму
События:
Начало прямоугольника
Конец прямоугольника
Точка

Решение Двумерное дерево отрезков — O(n log n) Одномерное дерево отрезков на сумму

Слайд 51

Задача I.
Подстрока

Задача I. Подстрока

Слайд 52

Автор задачи – Антон Банных
Условие – Антон Банных
Подготовка тестов – Антон Банных
Разбор –

Антон Банных

Автор задачи – Антон Банных Условие – Антон Банных Подготовка тестов – Антон

Слайд 53

Как решать?

Ахо-Корасик
Суффиксный массив
Суффиксное дерево
Суффиксный автомат

Как решать? Ахо-Корасик Суффиксный массив Суффиксное дерево Суффиксный автомат

Слайд 54

Ахо-Корасик

Строка abc
Запросы:
2 3 bc
2 3 abc

Ахо-Корасик Строка abc Запросы: 2 3 bc 2 3 abc

Слайд 55

Решение

Для каждого префикса строки запишем, в какой вершине автомата мы оказались
а – 3
ab

– 4
abc – 5
Обозначим этот массив L

Решение Для каждого префикса строки запишем, в какой вершине автомата мы оказались а

Слайд 56

Идея решения

Рассмотрим дерево, образованное суффиксными ссылками

Идея решения Рассмотрим дерево, образованное суффиксными ссылками

Слайд 57

Задача

Запрос: l, r, длина строки len
Строке соответствует вершина x
Определить, встречалась ли вершина из

поддерева x в L[l + len – 1, r]

Задача Запрос: l, r, длина строки len Строке соответствует вершина x Определить, встречалась

Слайд 58

Решение

Перенумеруем вершины в порядке выхода из обхода в глубину

Решение Перенумеруем вершины в порядке выхода из обхода в глубину

Слайд 59

Решение

Вершины одного поддерева имеют последовательные номера
Пусть пара (префикс, номер вершины) – точка
Запрос –

есть ли точка в прямоугольнике

Решение Вершины одного поддерева имеют последовательные номера Пусть пара (префикс, номер вершины) –

Слайд 60

Решение

Решение

Слайд 61

Решение

Двумерное дерево отрезков: O(n log2 n)
Одномерное дерево отрезков на сумму
События:
Начало прямоугольника
Конец прямоугольника
Точка

Решение Двумерное дерево отрезков: O(n log2 n) Одномерное дерево отрезков на сумму События:

Слайд 62

Асимптотика

Ахо-Корасик: O(n)
Перенумерация вершин: O(n)
Обработка запросов: O(n log n)

Асимптотика Ахо-Корасик: O(n) Перенумерация вершин: O(n) Обработка запросов: O(n log n)

Слайд 63

Задача J
Вода

Задача J Вода

Слайд 64

Автор задачи – Виталий Аксенов
Условие – Антон Ахи
Подготовка тестов – Антон Ахи
Разбор –

Антон Банных

Автор задачи – Виталий Аксенов Условие – Антон Ахи Подготовка тестов – Антон

Слайд 65

Как решать?

Поддерживаем текущий уровень воды
Поддерживаем суммарную скорость вытекания воды
Обрабатываем события

Как решать? Поддерживаем текущий уровень воды Поддерживаем суммарную скорость вытекания воды Обрабатываем события

Слайд 66

События

Уровень воды достиг очередного отверстия
Запрос на уровень воды
Появление новой течи
Устранение течи

События Уровень воды достиг очередного отверстия Запрос на уровень воды Появление новой течи Устранение течи

Слайд 67

Решение

Определяем ближайшее событие
Вычисляем уровень воды к моменту наступления события
Обрабатываем событие

Решение Определяем ближайшее событие Вычисляем уровень воды к моменту наступления события Обрабатываем событие

Слайд 68

Реализация

Выделим «интересные высоты» ─ те, которые встречаются в запросах
Храним скорость вытекания воды через

отверстия на высоте h
Событие ─ достижение «интересной высоты»

Реализация Выделим «интересные высоты» ─ те, которые встречаются в запросах Храним скорость вытекания

Слайд 69

Реализация

Появление и починка течи ─ изменение соответствующего элемента массива и суммарной скорости вытекания
Запрос

на определение уровня воды ─ вывод текущего уровня
Достижение «интересной высоты» ─ изменение суммарной скорости вытекания

Реализация Появление и починка течи ─ изменение соответствующего элемента массива и суммарной скорости

Слайд 70

Асимптотика

Выделение «интересных высот»
сортировка: O(n log n)
хеш-таблица: O(n)
Обработка событий: O(n)
Итого: O(n) или O(n log

n)

Асимптотика Выделение «интересных высот» сортировка: O(n log n) хеш-таблица: O(n) Обработка событий: O(n)

Имя файла: XVIII-Командная-олимпиада-школьников-СанктПетербурга-по-информатике-и-программированию.-Разбор-задач.pptx
Количество просмотров: 107
Количество скачиваний: 0