|
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
|
||||||
Определить, за сколько дней все деревья в лесу будут вырублены31.08.2015, 18:47. Показов 2704. Ответов 19
Метки нет (Все метки)
Всем привет ещё раз, и это уже третья задача на бинарный поиск. И в этот раз я уже преуспел в решении, осталось лишь найти ошибку ( она точно есть ). Вот сама задачка:
Кликните здесь для просмотра всего текста
Фермер Николай нанял двух лесорубов: Дмитрия и Федора, чтобы вырубить лес, на месте которого должно быть кукурузное поле. В лесу растут X деревьев.
Дмитрий срубает по A деревьев в день, но каждый K-й день он отдыхает и не срубает ни одного дерева. Таким образом, Дмитрий отдыхает в K-й, 2K-й, 3K-й день, и т.д. Федор срубает по B деревьев в день, но каждый M-й день он отдыхает и не срубает ни одного дерева. Таким образом, Федор отдыхает в M-й, 2M-й, 3M-й день, и т.д. Лесорубы работают параллельно и, таким образом, в дни, когда никто из них не отдыхает, они срубают A + B деревьев, в дни, когда отдыхает только Федор – A деревьев, а в дни, когда отдыхает только Дмитрий – B деревьев. В дни, когда оба лесоруба отдыхают, ни одно дерево не срубается. Фермер Николай хочет понять, за сколько дней лесорубы срубят все деревья, и он сможет засеять кукурузное поле. Требуется написать программу, которая по заданным целым числам A, K, B, M и X определяет, за сколько дней все деревья в лесу будут вырублены. Входные данные Входной файл INPUT.TXT содержит пять целых чисел, разделенных пробелами: A, K, B, M и X (1 ≤ A, B ≤ 10^9, 2 ≤ K, M ≤ 10^18, 1 ≤ X ≤ 10^18). Выходные данные В выходной файл OUTPUT.TXT выведите искомое количество дней. Есть только один пример: 2 4 3 3 25 Ответ: 7. Собственно, мой код первый пример проходит а дальше ошибка, подскажите что не так:
0
|
||||||
| 31.08.2015, 18:47 | |
|
Ответы с готовыми решениями:
19
Определить, через сколько лет в бывшем лесу будут расти одни опята?
|
| 31.08.2015, 19:23 | ||||||
|
Проще свой вариант написать, чем в чужом разбираться. Навскидку и без гарантии прохождения:
0
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 31.08.2015, 20:45 | ||||||
|
Accepted
0
|
||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||||
| 31.08.2015, 20:48 | ||||||
|
Здесь, как бы, никаких бинарных поисков не нужно, задача для урока алгебры.
1) За time дней вырубается A*(time-time div K)+B*(time-time div M) деревьев, где "div" - операция целочисленного деления. 2) Сменим целочисленное деление на обычное. Тогда оценка из пункта 1 станет занижена на величину delta не превышающую A+B (насчитали лишний выходной каждому лесорубу). 3) Таким образом, нам нужно найти time удовлетворяющее уравнению A*(time-time/K)+B*(time-time/M)=X-delta. 4) delta мы не знаем. Ну и хрен с ним. Находим решение high для delta=0 и low для delta=A+B. 5) Теперь перебираем пару значений между high и low. Все, задача решена.
0
|
||||||
|
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
|
||||||||||||
| 31.08.2015, 23:50 [ТС] | ||||||||||||
|
Mr.X, А чем отличается
Renji, Так тоже самое же, только с линейным поиском, я так понимаю.
0
|
||||||||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
| 01.09.2015, 00:12 | |
|
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 01.09.2015, 00:12 | |||
|
1) Лесорубы работают time дней, каждый N-й - выходной. Итого, рабочих дней time-time div N. 2) За time дней лесорубы рубят A*(time-time div K)+B*(time-time div M) деревьев. 3) Это приблизительно равно A*(time-time/K)+B*(time-time/M). 4) Значение выражения 2 отличается от значения выражения 3 не больше чем на A+B. 5) Примем это отличие за delta. Тогда лесорубы рубят A*(time-time/K)+B*(time-time/M)+delta деревьев. 6) Нужно узнать когда лесорубы срубят X деревьев. То есть, решить уравнение A*(time-time/K)+B*(time-time/M)=X-delta Дальше тривиально - решаем уравнение 6 относительно delta=0 и delta=A+B. Истина где-то между этими результатами.
0
|
|||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
| 01.09.2015, 00:15 | |
|
Чувствуется, что вы любите писать, но не любите читать свой код. После того как напишете - внимательно перечитывайте.
Добавлено через 2 минуты Renji, у вас с Иваной на втором тесте неправильный ответ.
0
|
|
|
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
|
|
| 01.09.2015, 00:22 [ТС] | |
|
Mr.X, Сижу, меняю алгоритм бинарного поиска и подходит только ваш, почему вы возвращаете R? Ведь по идее же должна середина возвращаться и есть ли альтернативы?
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 01.09.2015, 00:51 | ||
|
А здесь у нас числа целые, так что минимальный отрезок не может быть меньше единицы. Да, ответ где-то посередине, но так как она уже дробная, то берем ближайшее правое целое.
0
|
||
| 01.09.2015, 00:51 | ||
Идея правильная, бинарный поиск. Надо граничные случаи проверять, > на >= где-то заменить, потестировать на разных данных... Второй тест - где его входные данные например?ЗЫ И я категорически не согласен с методом Renji решать через плавучку целочисленные задачи. А будут там диапазоны до 10^100? В плавучке точность потеряется - и все, приплыли, неправильный ответ.
0
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
| 01.09.2015, 00:56 | |
|
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 01.09.2015, 01:05 | ||
|
0
|
||
| 01.09.2015, 01:09 | |
|
Renji, не хочется спорить, ибо думаю никто своего мнения не поменяет. Я знаю, что плавучка будет врать на больших интах и юзать ее в таких задачах - моветон. Ваши "аргументы" про 32 бита оставьте для детей. Или сами откройте для себя длинную арифметику.
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||||||||||||
| 01.09.2015, 07:49 | ||||||||||||||||
|
Написал шаблон для всех этих задач бинарного поиска по предикату (проходит все тесты).
Чтобы настроить его на другую задачу, нужно поменять в коде всего две строчки. Нужно заменить на другие 1) выражение предиката
и 2) строковый литерал
Вот код шаблона:
1
|
||||||||||||||||
|
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
|
|
| 01.09.2015, 09:26 [ТС] | |
|
Mr.X, Как только изучу структуры, классы и предикат - обязательно прочту. А пока что всем спасибо!
0
|
|
| 01.09.2015, 09:34 | |
|
0
|
|
|
58 / 55 / 28
Регистрация: 20.05.2015
Сообщений: 256
|
|
| 01.09.2015, 14:38 [ТС] | |
|
zer0mail,
Не по теме: Вообще, мы в школе ещё не изучали программирование, а если что-то не понятно - то, как мне кажется, лучший способ - это спросить.
0
|
|
| 01.09.2015, 15:18 | |
|
Не по теме: Бери учебники - там полно задач, ориентированных на обучение. А олимпиадные задачи ориентированы на поиск тех, кто может их самостоятельно решить. Выкладывание решений таких задач обесценивает труд их создателей. А те, кто их списывает, лишают себя возможности развить программистское мышление. Прочитать ответ и найти ответ самому - несопоставимые по пользе вещи. Знал одного "вумника", который копировал ответы с форума (не с этого) и "блистал" в школе. Правда, на городских олимпиадах лажался по-полной (подводил и своего учителя и свою школу). Если у него и были задатки, он их успешно засушил на корню.
0
|
|
| 01.09.2015, 15:18 | |
|
Помогаю со студенческими работами здесь
20
Определить сколько дней в году (всего 12 месяцев, в каждом есть определенное количество дней) определить сколько дней в году
Определить сколько дней до конца года С
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|