Порахуємо ціну за дві пачки гречки без знижки — , а зі знижкою — . Отже, ми зекономимо .
Пройдемо циклом по всіх областях, і якщо кількість хворих у відповідній області більша за межу «червоної» зони, тоді до відповіді додаємо одиницю.
Нехай -е ребро злитка лежить уздовж -ого ребра валізи. Тоді для всіх має виконуватися . Переберемо всі можливі перестановки та перевіримо, чи виконується ця умова хоча б для однієї з них.
D. Шифрування корупційних схем
Достатньо реалізувати алгоритм, описаний в умові — для кожної серії знайдемо її довжину, виведемо її розмір та сам символ.
E. Дешифрування корупційних схем
У рядку виділимо числа — довжини серій та літери — символи рядка. Кожен символ виведемо потрібну кількість разів.
Використаємо підхід динамічного програмування, а саме — максимальна відстань, яку Зенику потрібно буде пройти, за умови, що він має всі довідки від 1 до і стоїть у кабінеті . Тоді перебравши наступний кабінет, у який завітає Зеник, можна порахувати відповідь для позиції . Складність такого підходу — .
Можна показати, що для того, щоб максимізувати відстань, яку пройде Зеник, його варто відправити в крайній кабінет, який видає поточну довідку. Наприклад, якщо він зараз у кабінеті, де видають 2-гу довідку, тоді його відправлять або в найлівіший, або в найправіший кабінет, у якому видають 3-тю довідку. Складність у такому разі стає .
Використаємо систему неперетинних множин.
Пройдемся по всіх ребрах графа . Якщо вершини та належать різним компонентам зв’язності, то просто об’єднаємо їх. Якщо ж вони в одній компоненті, назвемо це ребро зайвим.
Пройдемося по всіх зайвих ребрах . Якщо в графі є тільки одна компонента зв’язності, то задача розв’язана. Інакше, існує вершина , що не зв’язна з . Замінимо дорогу на та об’єднаємо компоненти, що містять вершини й .
Зауважте, що оскільки , відповідь завжди існує.