Разбор задач 26. 12. 2016 ЗАДАЧА 1.
razbor.pptx
- Размер: 74.0 Кб
- Автор:
- Количество слайдов: 18
Описание презентации Разбор задач 26. 12. 2016 ЗАДАЧА 1. по слайдам
Разбор задач 26. 12.
ЗАДАЧА 1. НЕЗНАЙКА УЧИТЬСЯ СЧИТАТЬОбластная олимпиада 2005 года
Постановка задачи • Дана строка, состоящая из цифр; • Найти такую подстроку, которая представляет собой последовательность подряд идущих натуральных чисел и является самой длинной по количеству чисел.
Решение • Перебираем начальную позицию, с которой начинается искомая последовательность; • Перебираем длину начального числа; • Прибавляем единицу к начальному числу и проверяем следующее; • Проделываем тоже самое до тех пор пока строка не закончится либо число не будет удовлетворять последовательности; • Сложность решения O(|S| 3 ).
Трудности • Прибавление единицы к длинному числу (представленному в виде массива); • 0 не является натуральным числом;
ЗАДАЧА 2. ПОВРЕЖДЕННАЯ КАРТАОбластная олимпиада 2005 года
Постановка задачи • Дан двумерный массив, состоящий из нулей и единиц; • Найти наибольший по площади квадратный подмассив, который состоит из единиц; • Вычислить площадь найденного подмассива.
Решение • Задача решается с помощью динамического программирования; • Пусть A – исходный массив, D – массив состояний ДП; • D[i][j] – максимальная площадь квадрата из единиц, правая нижняя вершина которого находится в точке (i, j); • Если клетка (i, j) повреждена, то D[i][j] = 0; • Если не повреждена D[i][j] = min(D[i – 1][j], D[i][j – 1], D[i – 1] [j – 1]) + 1; • Первая строка и первый столбец заполняются отдельно D[1][j] = A[1][j] и D[i][1] = A[i][1]; • Сложность решения O(N * M);
ЗАДАЧА 3. ABRACADABRAРегиональная олимпиада РФ за 2012 год
Постановка задачи • Дан набор строк s 1 , s 2 , s 3 , …, sm ; • Для каждой из строк s i определить сколько слов из словаря t 1 , t 2 , …, tn имеют суффикс и префикс равный s i ; • iй суффикс – это последние i символов строки t; • iй префикс – это первые i символов строки t;
Решение • Преобразуем каждую строку t, состоящую из n символов к виду: t 0 t n-1 t 1 t n-2 … t n-2 t 1 t n-1 t 0 • Например слово table будет преобразовано в t e a l b b l a e t • Отсортируем преобразованный словарь в лексикографическом порядке; • Таким образом, все слова с одинаковым супрефиксом идут подряд;
Решение (1) • Для каждой из строк s проделаем аналогичное преобразование; • Двоичным поиском найдем самое левое вхождение (left) и самое правое вхождение (right); • Тогда ответом для строки si будет right – left + 1; • Сложность решения O(n * Log(m));
Пример • Пусть задан набор строк из примера задачи; • Тогда строки будут преобразованы следующим образом: abacaba => a a b b a a c c a a b b a a; abracadabra => a a b r r b a a c d a a d c a a b r r b a a; aa => a a ; abra => a a b r r b a a;
Пример (1) • Отсортируем словарь в лексикографическом порядке: aaaa aabbaaccaabbaa aabrrbaacdaadcaabrrbaa • Для образца a (aa) left = 1, right = 4, ответ = 4; • Для образца abra (aabrrbaa) left = 3, right = 4, ответ = 2; • Для образца abac (acbaabca) left = -1, right = -1, ответ = 0;
ЗАДАЧА 4. ЗЕМЛЕТРЯСЕНИЕUSACO Open
Постановка задачи • Задан неориентированный граф из N вершин и M ребер; • Каждое из ребер необходимо восстановить за время t и потратив на это c денежных единиц; • Задача состоит в том, чтобы восстановить ребра таким образом, чтобы граф оказался связным; • При этом обещано вознаграждение F за выполненную задачу; • Требуется вычислить максимально возможную прибыльность (т. е. количество денег, которые можно заработать за час работы);
Решение • Допустим, что нам известна прибыльность работ v ; • Тогда очевидно, что мы можем вычислить стоимость каждого из ребер как t * v + c: первое слагаемое – полученная прибыть, второе – стоимость восстановления дороги; • В этом случае мы можем построить минимальное остовное дерево и если его стоимость меньше вознаграждения F, то такая прибыльность нам подходит;
Решение (1) • Заметим, что если увеличивать прибыльность v , то и стоимость дерева будет расти; • Следовательно, cost(v) – возрастающая (монотонная функция); • Таким образом, v можно перебирать двоичным поиском; • Найденное оптимальное значение прибыли и будет ответом; • Сложность решения O(Log(C * M) * M * Log(M));