Задача_при_вырубки_леса

Бесконечный цикл в задаче про вырубку леса

Фермер Николай нанял двух лесорубов: Дмитрия и Федора, чтобы вырубить лес, на месте которого должно быть кукурузное поле. В лесу растут 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 выведите искомое количество дней.

INPUT.TXT OUTPUT.TXT 2 4 3 3 25 7

Код написал но он почему-то вообще не запускается, не могу увидеть своей ошибки в коде может подскажите где у меня ошибка, а может быть у меня ход решения совсем неправильный?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include  using namespace std; int main() { int64_t a,k,b,m,x,i,s; cin>>a>>k>>b>>m>>x; s=a+b; i=1; while(sx){ if(i%k==0 && i%m==0){ s=a+b; } if(i%k==0 && i%m!=0){ s=s+a; } if(i%k!=0 && i%m==0){ s=s+b; } i++; } cout; }

Почему цикл на при 1 уходит в бесконечный цикл?
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdio.h> #include <string.h> int.

Бесконечный цикл for
Запишите цикл, который суммирует первые 100 натуральных чисел, которые делятся на 7 : используя.

Бесконечный цикл
Задача: Ввести количество камней, ввести вес каждого камня, сложить камни в 2 кучки так чтобы.

Бесконечный цикл
#include <iostream> #include <climits> bool is_int(double); int main() < using namespace.

Эксперт C

Хотя они все сволочи, конечно. И Николай, и Дмитрий, и Федор

C. Вырубка леса
Ограничение времени 1 секунда
Ограничение памяти 256Mb
Ввод forest.in
Вывод forest.out
Фермер Николай нанял двух лесорубов: Дмитрия и Федора, чтобы вырубить лес, на месте которого должно быть кукурузное поле. В лесу растут X деревьев.

Дмитрий срубает по A деревьев в день, но каждый K-й день он отдыхает и не срубает ни одного дерева. Таким образом, Дмитрий отдыхает в K-й, 2K-й, 3K-й день, и т.д.

Федор срубает по B деревьев в день, но каждый M-й день он отдыхает и не срубает ни одного дерева. Таким образом, Федор отдыхает в M-й, 2M-й, 3M-й день, и т.д.

Лесорубы работают параллельно и, таким образом, в дни, когда никто из них не отдыхает, они срубают A + B деревьев, в дни, когда отдыхает только Федор — A деревьев, а в дни, когда отдыхает только Дмитрий — B деревьев. В дни, когда оба лесоруба отдыхают, ни одно дерево не срубается.

Фермер Николай хочет понять, за сколько дней лесорубы срубят все деревья, и он сможет засеять кукурузное поле.

Требуется написать программу, которая по заданным целым числам A, K, B, M и X определяет, за сколько дней все деревья в лесу будут вырублены.

Формат ввода
Входной файл содержит пять целых чисел, разделенных пробелами: A, K, B, M и X (1 ≤ A, B ≤ 109, 2 ≤ K, M ≤ 1018, 1 ≤ X ≤ 1018).

Формат вывода
Выходной файл должен содержать одно целое число — искомое количество дней.

Пример
Ввод Вывод
2 4 3 3 25
7
Примечания
В приведенном примере лесорубы вырубают 25 деревьев за 7 дней следующим образом:

1-й день: Дмитрий срубает 2 дерева, Федор срубает 3 дерева, итого 5 деревьев;
2-й день: Дмитрий срубает 2 дерева, Федор срубает 3 дерева, итого 10 деревьев;
3-й день: Дмитрий срубает 2 дерева, Федор отдыхает, итого 12 деревьев;
4-й день: Дмитрий отдыхает, Федор срубает 3 дерева, итого 15 деревьев;
5-й день: Дмитрий срубает 2 дерева, Федор срубает 3 дерева, итого 20 деревьев;
6-й день: Дмитрий срубает 2 дерева, Федор отдыхает, итого 22 дерева;
7-й день: Дмитрий срубает 2 дерева, Федор срубает оставшееся 1 дерево, итого все 25 деревьев срублены.

Внимание! Тест из примера не подходит под ограничения для подзадач 2 и 3, но решение принимается на проверку только в том случае, если оно выводит правильный ответ на тесте из примера. Решение должно выводить правильный ответ на тест даже, если оно рассчитано на решение только каких-либо из подзадач 2 и 3.

Система оценки и описание подзадач

Подзадача 1 (32 балла)
1 ≤ X ≤ 1000, 1 ≤ A, B ≤ 1000, 2 ≤ K, M ≤ 1000
Баллы за подзадачу начисляются только в случае, если все тесты успешно пройдены.

Подзадача 2 (10 баллов)
1 ≤ X ≤ 1018
X < K
X < M
При решении этой подзадачи можно считать, что лесорубы не отдыхают.
Баллы за подзадачу начисляются только в случае, если все тесты успешно пройдены.

Подзадача 3 (10 баллов)
1 ≤ X ≤ 1018
Дополнительно к приведенным ограничениям выполняется условие K = M.
Баллы за подзадачу начисляются только в случае, если все тесты успешно пройдены.

Подзадача 4 (48 баллов)
1 ≤ X ≤ 1018, 1 ≤ A, B ≤ 109, 2 ≤ K, M ≤ 1018
В этой подзадаче 16 тестов, каждый тест оценивается в 3 балла. Баллы за каждый тест начисляются независимо.

Получение информации о результатах окончательной проверки
По запросу сообщается результат окончательной проверки на каждом тесте.
Подскажите пожалуйста что здесь не так:

Добавлено через 6 минут
Вот мой код и внем тоже есть ошбка подскажите какая

Источник

Помогите решить олимпиадную задачу про вырубку леса

Фермер Николай нанял двух лесорубов: Дмитрия и Фёдора, чтобы вырубить лес, на месте которого должно быть кукурузное поле. В лесу растут X деревьев. Дмитрий срубает по A деревьев в день, но каждый K-й день он отдыхает и не срубает ни одного дерева. Таким образом, Дмитрий отдыхает в K-й, 2K-й, 3K-й день, и т. д. Фёдор срубает по B деревьев в день, но каждый M-й день он отдыхает и не срубает ни одного дерева. Таким образом, Фёдор отдыхает в M-й, 2M-й, 3M-й день, и т. д. Лесорубы работают параллельно и, таким образом, в дни, когда никто из них не отдыхает, они срубают A+B деревьев, в дни, когда отдыхает только Фёдор — A деревьев, а в дни, когда отдыхает только Дмитрий — B деревьев. В дни, когда оба лесоруба отдыхают, ни одно дерево не срубается. Фермер Николай хочет понять, за сколько дней лесорубы срубят все деревья, и он сможет засеять кукурузное поле. Требуется написать программу, которая по заданным целым числам A, K, B, M и X определяет, за сколько дней все деревья в лесу будут вырублены.

Я написал решение, но тестирующая система выдаёт TL в некоторых тестах. Подскажите пожалуйста как его можно оптимизировать?

a, k, b, m, x = map(int, input().split()) finished = 0 day = 0 while True: day += 1 if finished >= x: break if day % k != 0: finished += a if day % m != 0: finished += b print(day - 1) 

Ну для начала неплохо бы не с нуля начинать, а посчитать нижнюю X/(A+B) оценку времени. И считать от неё. И плюсить за каждый день — моветон. зная номер дня, количество деревьев в день и период отдыхания, посчитать количество срубленных деревьев можно и без итераций.

Источник

Экологи запротестовали против большого объема лесозаготовки. Председатель леспромхоза успокоил их следующим образом:

«В лесу 99% сосен. Будут вырубаться только сосны, и после вырубок процент сосен останется почти неизменным — сосен будет 98%». Какая часть деревьев будет вырублена? Ответ дайте в процентах.

Ответы 2

Честно говоря, я бы решение объяснила немного иначе:
Возьмём за Х — общее кол-во деревьев в лесу (шт).
Тогда, сосен в нём =Х*99/100 (шт) — это 99%;
а других деревьев =Х*1/100 (шт) — это 1%.
После вырубки кол-во сосен станет =Y (шт) — и это будет уже 98%;
а кол-во других деревьев останется тем же =Х*1/100 (шт) — это 2%.
Составляем пропорцию:
Y (шт) — 98%
Х*1/100 (шт) — 2%
Находим Y:
Y=(98*Х*1/100)/2=49*Х/100
Значит, после вырубки в лесу останется всего деревьев:
49*Х/100 + 1*Х/100=Х*1/2 (шт) — т.е., половина от первоначального количества — 50%.
Ответ: под вырубку отведено 50% леса.

Если состав леса составлял 99% сосен, то на оставшиеся деревья приходилось:

Обозначим их равными Х деревьев, количество сосен тогда будет:

После вырубок сосен, других деревьев станет:

Обозначим сосны У и найдем сколько они составят по отношению к другим деревьям:

Сопоставим количество сосен до и после:

Если принять изначальное количество сосен за 100%, то можно найти какой процент сосен будет вырублен (обозначим его N):

N = 100 * 50 * Х / (99 * Х) = 5000 / 99 = 50, 505050…

Количество вырубленных сосен составит почти 50, 51% .

Источник

Разбор олимпиадной задачи — Вырубка деревьев

Чтобы лучше понять суть задачи — рекомендую нарисовать на бумаге пример, а также рассмотреть другие примеры — для n=9 и m=3: Итак, нам нужно вычислить количество способов, которыми можно разместить деревья с заданными между ними интервалами. Если интервал равен нулю — то мы размещаем группу из M деревьев по N позиций.
Если интервал равен 1 — то мы размещаем группу из M+(M-1) элементов (потому что M деревьев, да еще (M-1) пропусков между ними.
Если интервал равен 2 — то нужно разместить группы по M + (M-1)*2 , т.к. пропусков в 2 раза больше чем в предыдущем случае.
И так далее. Тогда решение может быть сведено к перебору всех возможных интервалов. В простейшем случае — считать можно до тех пор, пока M + (M-1)*Distance не окажется больше N . Однако, при желании можно вычислить MaxDistance аналитически. Исходный код решения:

#include using namespace std; int variants(int all_trees, int remaining_trees) < if (0 == remaining_trees) return 1; if (1 == remaining_trees) return all_trees; if (all_trees < remaining_trees) return 0; int variants = 0; for (int distance = 0;true; distance++) < int usedPositions = remaining_trees + distance*(remaining_trees-1); if (usedPositions >all_trees) break; variants += all_trees — usedPositions + 1; > return variants; > int main() < std::ifstream ifst("input.txt"); std::ofstream ofst("output.txt"); int n, m; ifst >> n >> m; ofst

Видно, что отдельно пришлось обработать случай «когда нужно вырубить все деревья» и некоторые другие.

Источник

Читайте также:  Рудбекия_осенний_лес_многолетняя
Оцените статью