Бинарный поиск по ответу: задачи «Дипломы» и «Коровы - в стойла»

  Рет қаралды 6,119

Олимпиадное программирование в УлГТУ

Олимпиадное программирование в УлГТУ

Күн бұрын

Пікірлер: 22
@op_ulstu
@op_ulstu Жыл бұрын
На 5:53, к сожалению, ошибка: в качестве начального значения для r следует брать diplomaCount * max(diplomaHeight, diplomaWidth), иначе решение будет выдавать неверный ответ на тестах вида «diplomaCount = 5, diplomaHeight = 1, diplomaWidth = 100». Спасибо зрителю @zero_klou, обратившему внимание на этот недочёт. Когда ограничения на количество и размер дипломов велики, такая инициализация r, как было замечено, может повлечь переполнения при промежуточных вычислениях в функции can(). Попробуйте решить соответствующую задачу на ACMP: acmp.ru/index.asp?main=task&id_task=712, чтобы получить более полное представление об этом (обратите внимание, что будет происходить на тестах вида «diplomaCount = 10^9, diplomaHeight = 1, diplomaWidth = 10^9»). Существует более общий и надёжный способ подбирать верхнюю границу в задачах, где есть риск получить переполнение или неверный ответ из-за неправильно выбранной константы: int l = 0, r = 1; while (!can(diplomaCount, diplomaHeight, diplomaWidth, r)) r *= 2; Такой подбор верхней границы потребует не более logN итераций (то есть столько же, сколько и последующий бинпоиск), поэтому не скажется на общей сложности программы.
@DauletKelimberdin
@DauletKelimberdin 2 ай бұрын
когда я пишу 2 3 10 выводит 10. А ответ 9
@ДенДенев-в1л
@ДенДенев-в1л 10 ай бұрын
Как же автор все круто объяснил. Я физически ощутил как поумнел и вспомнил множество задач где можно было бы использовать бинарный поиск предварительно отсортировав коллекцию любой сортировкой с той же логарифмической сложностью.
@miron5733
@miron5733 Жыл бұрын
Офигенное объяснение 10 / 10, спасибо!
@БибарысК-о2я
@БибарысК-о2я Жыл бұрын
Здраствуйте! Очень хотелось бы видео про ДП и рюкзаки и тд! СПАСИБО!!!
@beworld_pasha
@beworld_pasha 10 ай бұрын
Попалась задача данного типа в Я.Контесте, отличное видео, спасибо!)
@Лев-й7я
@Лев-й7я 7 ай бұрын
А случаем не в нлогн
@Лев-й7я
@Лев-й7я 7 ай бұрын
Кружок такой есть
@updornespit
@updornespit Ай бұрын
@@Лев-й7я ты в какой группе?
@Лев-й7я
@Лев-й7я Ай бұрын
@@updornespit был в прошлом году в a это пред последния он в тинсы не смог поступить):
@Лев-й7я
@Лев-й7я Ай бұрын
@updornespit я в прошлом году был в групе а но в этом году не поступил в тинсы ): група а это пред послединия група
@starosta8498
@starosta8498 Жыл бұрын
У вас отличные уроки с актуальными темами. Очень жаль, что видео выходят весьма редко
@HopeOfMankind_
@HopeOfMankind_ Жыл бұрын
Большое спасибо!
@ДаниилСинцов-б9в
@ДаниилСинцов-б9в Жыл бұрын
Отличное объяснение!
@ГлебКрасавчик-н7о
@ГлебКрасавчик-н7о Жыл бұрын
Шикарное объяснение, спасибо. Только в видео (если я не прав поправьте) на 5:34, где показан альтернативный код проверки возможного вхождения/невхождения числа в промежуток написано rows>=(diplomCount+colums-1) / colums, разве не должно быть просто rows>=diplomCount /colums?
@op_ulstu
@op_ulstu Жыл бұрын
Обычное деление происходит с округлением вниз, нам же нужно округление вверх. Если нужно разместить 10 дипломов и было 4 столбца, то понадобится не менее 3 строк.
@ГлебКрасавчик-н7о
@ГлебКрасавчик-н7о Жыл бұрын
А зачем мы к кол-ву дипломов прибавляем кол-во столбцов, вычетаем 1, а потом делим на кол-во столбцов?
@op_ulstu
@op_ulstu Жыл бұрын
@@ГлебКрасавчик-н7о Это стандартный способ записи деления с округлением вверх: (a + b - 1) / b. Если a уже делилось нацело на b, то от добавления (b - 1) результат деления не изменится. А вот если a не делилось нацело на b (то есть была хотя бы "лишняя" единица в остатке), то добавления (b - 1) будет достаточно, чтобы результат деления стал на единицу больше.
@zero_klou
@zero_klou Жыл бұрын
По поводу кода для задачи с дипломами: не совсем понятно, зачем при расчете mid нам требуется вычислять right - 1. Мы же тут рассматриваем не границы массива чисел, а сами числа. Также при расчете правой границы целесообразно высчитывать её не на основе высоты, а на основе большей стороны диплома. А так спасибо, всё очень понятно объяснено.
@op_ulstu
@op_ulstu Жыл бұрын
Возможно, вы перепутали единицу и строчную L - в коде написано «int mid = left + (right - left) / 2». Это достаточно традиционный способ поиска середины с защитой от переполнений, когда left и right становятся достаточно большими по модулю (распростанённое «int mid = (left + right) / 2» в этом случае будет переполняться). Такое выражение тоже может переполниться, но только когда left большое и отрицательное, а right большое и положительное; это может случиться только в самом начале, и, как правило, такую проблему сравнительно просто заметить. По поводу начального значения правой границы - да, верно, в видео, к сожалению, здесь досадная ошибка, подразумевалось «r = diplomaCount * max(diplomaHeight, diplomaWidth)», иначе это решение будет работать неверно на примерах вида «diplomaCount = 5, diplomaHeight = 1, diplomaWidth = 100». Спасибо, что обратили на это внимание.
Вещественный бинарный поиск: for вместо while
10:05
Олимпиадное программирование в УлГТУ
Рет қаралды 1,6 М.
Тернарный поиск
12:21
Олимпиадное программирование в УлГТУ
Рет қаралды 2,8 М.
BAYGUYSTAN | 1 СЕРИЯ | bayGUYS
36:55
bayGUYS
Рет қаралды 1,9 МЛН
Sigma Kid Mistake #funny #sigma
00:17
CRAZY GREAPA
Рет қаралды 30 МЛН
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН
The Best Band 😅 #toshleh #viralshort
00:11
Toshleh
Рет қаралды 22 МЛН
Binary Search Algorithm | JavaScript
6:30
Front-end Science із Сергієм Пузанковим
Рет қаралды 50 М.
Очередь с приоритетами: реализация на двоичной куче
16:21
Олимпиадное программирование в УлГТУ
Рет қаралды 4,7 М.
Бинарный поиск элемента в массиве
7:23
Олимпиадное программирование в УлГТУ
Рет қаралды 7 М.
Interview challenge: Search in sorted and shifted array | JS
8:13
Front-end Science із Сергієм Пузанковим
Рет қаралды 13 М.
Динамическое программирование 1
44:20
Школа инженерных наук Бином
Рет қаралды 6 М.
Очередь с приоритетами: эффективное построение двоичной кучи, сортировка кучей
16:27
Олимпиадное программирование в УлГТУ
Рет қаралды 2,1 М.
Просто о сложном: Бинарный поиск
2:58
Д. А. Михалин
Рет қаралды 45 М.
Поиск в ширину (BFS)
16:39
Олимпиадное программирование в УлГТУ
Рет қаралды 32 М.
Левый бинарный поиск: поиск первого вхождения
9:52
Олимпиадное программирование в УлГТУ
Рет қаралды 2,3 М.
BAYGUYSTAN | 1 СЕРИЯ | bayGUYS
36:55
bayGUYS
Рет қаралды 1,9 МЛН