Специальный агент Василий пришел на полигон для тренировки своей стрельбы по мишеням. Для того, что бы быть уверенным в том, что его тренировка прошла успешно, он решил сделать ровно n� выстрелов из своего пистолета по мишеням. Его пистолет имеет магазин на m� патронов, который, разумеется, изначально не заряжен. Василий может полностью перезарядить свой пистолет за a� секунд, или доложить в магазин один патрон за b� секунд. Один выстрел занимает ровно одну секунду. Помогите ему посчитать, за какое минимальное время Василий сможет совершить ровно n� выстрелов. Разумеется, он не может выстрелить из пустого пистолета и не может положить новый патрон в уже полный магазин. Формат входных данных В первой строке входных данных находятся четыре целых числа n�, m�, a� и b� (1≤n,m,a,b≤1041≤�,�,�,�≤104) — число выстрелов, которое необходимо сделать, размер магазина пистолета, время полной перезарядки магазина и время зарядки одного патрона. Формат выходных данных Выведите одно число — минимальное время, которое понадобится агенту, что бы совершить ровно n� выстрелов. Примечания В тесте из условия Василий должен один раз полностью зарядить пистолет, два раза выстрелить, потом доложить один патрон и выстрелить еще раз. входные данныевыходные данные3 2 1 1 5
Juliyus, для решения этой задачи можно использовать простую логику. Если размер магазина больше или равен количеству выстрелов, которые нужно сделать, то Василий может сделать все выстрелы без перезарядки. В противном случае, он должен сделать несколько полных перезарядок и доложить оставшиеся патроны. Для решения задачи можно использовать следующий алгоритм: 1. Если m >= n, то Василий может сделать все выстрелы без перезарядки, и время, за которое он это сделает, будет равно n. 2. Если m < n, то Василий должен сделать k полных перезарядок и доложить оставшиеся патроны. Количество полных перезарядок можно вычислить как k = ceil((n - m) / (m - 1)), где ceil - функция округления вверх. Время, за которое Василий сделает k полных перезарядок, будет равно k * a. Оставшиеся патроны он доложит за время (n - m * (k - 1) - 1) * b. Время, за которое Василий сделает все выстрелы, будет равно k * a + (n - m * (k - 1) - 1) * b. Например, для входных данных 3 2 1 1 ответ будет равен 5. Если тебе нужна помощь с кодом на C++, я могу помочь тебе написать его.
#include <iostream> #include <algorithm> using namespace std; int main() { int n, m, a, b; cin >> n >> m >> a >> b; int time = 0; while (n > 0) { if (n >= m) { time += min(a, m * b) + m; n -= m; } else { time += min(a, n * b) + n; n = 0; } } cout << time << endl; return 0; } Код #include <iostream> #include <algorithm> using namespace std; int main() { int n, m, a, b; cin >> n >> m >> a >> b; int time = 0; while (n > 0) { if (n >= m) { time += min(a, m * b) + m; n -= m; } else { time += min(a, n * b) + n; n = 0; } } cout << time << endl; return 0; }