Республиканская олимпиада по информатике 2010 года Заключительный этап Разбор задач Авторы разбора: А.О. Сикорский, С.И. Кашкевич.

Презентация:



Advertisements
Похожие презентации
Что нужно знать: динамическое программирование – это способ решения сложных задач путем сведения их к более простым задачам того же типа динамическое.
Advertisements

Разбор задач олимпиады ФПМИ 2010 года (Лига B) © 2010, Serge Kashkevich.
Задания части А Задания части С. 1. Значения двух массивов A[1..100] и B[1..100] задаются с помощью следующего фрагмента программы. Сколько элементов.
Х Рыбалко Т.В. Сведение задачи к подзадачам Понятие рекуррентного соотношения Использование таблиц для запоминания решений подзадачИспользование таблиц.
Кафедра математики и моделирования Старший преподаватель Е.Г. Гусев Курс «Высшая математика» Лекция 19. Тема: Транспортная задача. Цель: Рассмотреть метод.
Методика решения и оценивания задач «С1», «С2» Единого Государственного Экзамена.
МАССИВЫ ОДНОМЕРНЫЕ МАССИВЫ Презентацию подготовила Ученица 11 Б Карапетян Наташа.
Программирование типовых алгоритмов вычислений Информатика.
Линейное уравнение в целых числах Методическая разработка учителя Поляковой Е. А.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
M-чередующаяся декомпозиция Лекция 10. Нечетная декомпозиция Теорема 9.7 (Lovász [1972] ) Граф является фактор-критическим тогда и только тогда, когда.
Поиск информации Задача поиска: где в заданной совокупности данных находится элемент, обладающий заданным свойством? Большинство задач поиска сводится.
«Программирование циклических алгоритмов» Учитель информатики гимназии 12 г. Тюмени Бугаева Елена Викторовна.
Исполнитель-вычислитель: сложная задача с простым решением О.Б. Богомолова, Д.Ю. Усенков, Москва.
Задачи с использованием одномерных массивов 1. Опишите алгоритм подсчёта среднего значения положительных элементов в целочисленном массиве из 30 элементов.
Задачи с использованием одномерных массивов 1. Опишите алгоритм подсчёта среднего значения положительных элементов в целочисленном массиве из 30 элементов.
Пример задания: Сколько единиц в двоичной записи числа 1025? 1) 1 2) 2 3) 10 4) 11 А1 (базовый уровень, время – 1 мин)
K-периодичный массив. В данной задаче речь пойдет только о массивах, все элементы которых равны 1 и/или 2. Массив a называется k-периодичным, если его.
Урок 8. Понятие массива. Массивы, определение и описание линейного массива. Пример использования. Формирование и обработка одномерных массивов. Поиск в.
Основные понятия Определение. арифметической прогрессией разностью прогрессии. Определение. Числовую последовательность, каждый член которой, начиная.
Транксрипт:

Республиканская олимпиада по информатике 2010 года Заключительный этап Разбор задач Авторы разбора: А.О. Сикорский, С.И. Кашкевич

Конфетный розыгрыш Тур 1, задача 1 Пытались решить: 119 Решили полностью: 116 Среднее количество набранных баллов: 99.1

Конфетный розыгрыш Бочонок с минимальным числом непременно будет отброшен всеми детьми, которые его вытянут, и, следовательно, останется в мешке. Следовательно, результатом решения задачи будет сумма всех A i, за исключением минимального. Если совместить поиск минимального элемента и накопление суммы, то задачу можно решить за один просмотр массива A. Трудоёмкость решения этой задачи – O(N).

Спартакиада Тур 1, задача 2 Пытались решить: 119 Решили полностью: 86 Среднее количество набранных баллов: 88

Спартакиада Задача сводится к расчёту величины T i = A i * X + B i * Y + C i * Z для всех учеников школы и нахождению трёх учеников, для которых величина T i максимальна. Как и в предыдущей задаче, можно совместить поиск максимальных элементов и вычисление T i. Задачу также можно решить за один просмотр массивов A, B, C. Трудоёмкость решения этой задачи – O(N).

Морковная засуха Тур 1, задача 3 Пытались решить: 112 Решили полностью: 19 Среднее количество набранных баллов: 58

Морковная засуха Добавим к числу орошаемых горизонтальных борозд 0 -ю и N+1 -ю борозду, соответствующую границам поля. Тогда поле разбивается на N+1 горизонтальную полосу, ограниченную орошаемыми бороздами. Аналогичные рассуждения выполним для вертикальных полос. Обозначим соответственно через P i и Q i ширину вертикальной и горизонтальной полосы с номером i. Полосы разбиваются на три группы: 1. P i 2*K 1 2. P i > 2*(K 1 + K 2 ) 3. 2*K 1 < P i 2*(K 1 + K 2 )

Морковная засуха Для каждого участка, ограниченного орошаемыми бороздами, выполняем следующие рассуждения: Если хотя бы одна из полос, в которых лежит участок, относится к первому типу, безопасных гряд на этом участке нет. Иначе, если хотя бы одна из полос относится к третьему типу, то безопасные гряды образуют прямоугольник общей площадью ( P i - 2*K 1 ) * ( Q j - 2*K 1 ) Наконец, если обе полосы участка относятся к второму типу, безопасные гряды образуют «кольцо» площадью ( P i - 2*K 1 ) * ( Q j - 2*K 1 ) - ( P i - 2*(K 1 +K 2 )) * ( Q j - 2* (K 1 +K 2 ))

Морковная засуха Типы полос на рисунке из условия задачи: Трудоёмкость решения этой задачи – O(M*N)

Морковная засуха Существует и другое решение с трудоёмкостью O(M+N). Вначале просматриваем горизонтальные полосы и рассчитываем числовые величины S 1, S 2 и S 3. Изначально они равны нулю. В зависимости от типа полосы происходит увеличение этих величин: Если полоса принадлежит к второму типу, то S 2 := S 2 + ( Q j - 2*K 1 ), S 3 := S 3 + ( Q j - 2* (K 1 +K 2 )) Если полоса принадлежит к третьему типу, то S 1 := S 1 + ( Q j - 2*K 1 )

Морковная засуха Затем просматриваем вертикальные полосы. Если полоса принадлежит к второму типу, то количество безопасных гряд увеличивается на (P i - 2*K 1 ) *S 1 + (P i - 2*(K 1 +K 2 )) * S 3 Если полоса принадлежит к третьему типу, то количество безопасных гряд увеличивается на (P i - 2*K 1 ) *(S 1 +S 2 )

Видео сервис Тур 1, задача 4 Пытались решить: 102 Решили полностью: 6 Среднее количество набранных баллов: 25

Видео сервис Будем считать Иваново кемпингом с номером 0, а Славино – кемпингом с номером N+1. Введём функцию F(i, j) – искомая сумма коэффициентов при условии, что i сервисов расположены до кемпинга с номером j, а оставшиеся k-i сервисов – в кемпинге j (хоть это и запрещено условиями задачи). Тогда решение нашей задачи – F(k, N+1). Для этой функции будем строить рекуррентное соотношение.

Видео сервис Очевидно, F(0, 0) = 0. Рекуррентное соотношение для F(i, j) имеет вид при условии Решение про этой формуле имеет трудоёмкость O(N 3 ) и набирает 60 баллов.

Видео сервис Перепишем рекуррентное соотношение, вынося члены, не зависящие от t: Рассчитываемые величины помещаем в кучу, единую для всех j. При этом из кучи, возможно, придётся выбросить элементы, для которых условие (*) не выполняется. Такое решение имеет трудоёмкость O(N*K*logN) и набирает 100 баллов.

Бактериальное родство Тур 2, задача 1 Пытались решить: 119 Решили полностью: 116 Среднее количество набранных баллов: 99.3

Бактериальное родство Задача решается полным перебором. Просматриваем все модификации A x и B y для всех возможных x и y и рассчитываем степень родства для каждой пары. Для упрощения расчётов можно продублировать каждую строку и для модификаций A x и B y сравнивать символы A[x+t] и B[y+t] для всех возможных t. ATGATACGCAGTATGATACGCAGTATGCGTAGTATAATGCGTAGTATA

Стоп игра! Тур 2, задача 2 Пытались решить: 119 Решили полностью: 58 Среднее количество набранных баллов: 80.5

Стоп игра! Задача сводится к нахождению числа из интервала [L, R], для которого первый делитель, отличный от единицы, максимален (точнее, самого такого делителя). При этом имеет смысл проходить от больших чисел к меньшим: если мы найдём простое число, то перебор прекращается.

Брокер Тур 2, задача 3 Пытались решить: 119 Решили полностью: 27 Среднее количество набранных баллов: 66.6

Брокер Простейшее решение этой задачи состоит в моделировании процесса продажи и покупки акций и может быть реализовано следующим фрагментом программы: for i := 1 to K do if N>=i then {покупаем акцию} N := N-i else {продаём акцию} N := N+i; Такое решение набирает 50 баллов.

Брокер Для того, чтобы обнаружить закономерность и уменьшить количество итераций, рассмотрим поведение брокера при N=1. Когда количество денег уменьшается до нуля, брокер продаёт две акции подряд, иначе дни покупки и продажи чередуются __+_+__+_+_+_+_

Брокер Если баланс достигает нуля в день T, далее следуют продажа и T+1 цикл продажи – покупки. Следующее обнуление баланса наступит в день 3*(T+1). Таким образом, нам необходимо определить день R последнего обнуления баланса, а затем рассчитать окончательный баланс. В случае, когда изначально брокер имеет достаточно денег для нескольких покупок, необходимо выполнить указанный ранее цикл до первого обнуления баланса. Трудоёмкость этого решения – O(logN).

Шарики 2010 Тур 2, задача 4 Пытались решить: 116 Решили полностью: 1 Среднее количество набранных баллов: 38.8

Шарики 2010 Сведём начальную и конечную позицию воедино, добавив обозначения «шарик исчез» и «шарик появился»: Заметим, что если A + B C, то применять сдвиг нецелесообразно, достаточно выполнять лишь операции первого и второго типа (1 тест). Если отказаться от операции сдвига вообще, то можно получить 40 баллов.

Шарики 2010 Пусть K – целая часть от деления A + B на C. Тогда имеет смысл переместить шарик из красной в жёлтую позицию, если расстояние между ними не превосходит K и на этом пути нет запрещённых клеток. Осталось найти пары клеток, для которых надо выполнить сдвиг.

Шарики 2010 Для решения этой задачи можно пойти несколькими путями, например: Построить двудольный граф, вершины которого соответствуют красным и жёлтым клеткам. Рёбра графа связывают вершины разных цветов, расстояние между которыми не превышает K, а вес вершины равен минимальному расстоянию между клетками. В этом графе находим максимальное паросочетание минимального веса. Для K=4 и предыдущего примера имеем: 3 1 (3,3)(4,1) (3,2)