Вопрос задан 03.06.2023 в 13:35. Предмет Информатика. Спрашивает Слобожанинов Александр.

Сдать решение задачи 2-Ну все, я попрыгал! Полный балл: 100 Ограничение времени: 1 с Ограничение

памяти: 512M Ограничение размера стека: 64M Задача 2: Ну все, я попрыгал! Персонаж известной компьютерной игры Марио постарел и почти перестал прыгать. Но совсем недавно он увидел спуск из N ступенек, и его накрыло ностальгией. Марио встал на самую верхнюю ступеньку и решил преодолеть этот спуск при помощи прыжков. Когда-то Марио знал тысячи различных видов прыжков, но теперь он смог вспомнить только два: короткие и длинные. Короткий прыжок позволяет спуститься на произвольное число ступенек, не большее X, а длинный — на произвольное число, не большее Y (X < Y). Но в силу возраста Марио не может делать два длинных прыжка подряд и вынужден между ними совершать хотя бы один короткий. При этом Марио не хочет слишком уж сильно ухудшить свои прошлые результаты и поэтому постарается обойтись как можно меньшим числом прыжков. Помогите Марио посчитать минимальное количество прыжков, требующееся для преодоления всех N ступенек. Входные данные В первой строке входных данных записано целое число X — максимальная длина короткого прыжка. Во второй строке записано целое число Y (1 ≤ X < Y < 1018) — максимальная длина длинного прыжка. В третьей строке записано целое число N (1 < N < 1018) — количество ступенек в спуске. Выходные данные В единственной строке выведите целое число — минимальное число прыжков, необходимое Марио для спуска. Система оценки Решения, правильно работающие только для случаев, когда X, Y и N не превосходят 105, будут оцениваться в 35 баллов. Решения, правильно работающие только для случаев, когда X, Y и N не превосходят 109, будут оцениваться в 50 баллов. Примечание Обратите внимание, что входные данные, а также ответ могут быть достаточно большими, поэтому следует использовать 64-битный тип данных, например long long в C/C++, long в Java и C#, int64 в Pascal.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Шинкаренко Лидия.

Ответ:

X = int(input())

Y = int(input())

N = int(input())

if (N % (X + Y)) == 0:

   print(int((N / (X + Y)) * 2))

else:

   if (N % (X + Y)) <= Y:

       print(int(((N // (X + Y)) * 2) + 1))

   else:

       print(int(((N // (X + Y)) * 2) + 2))

=============================

На Python

0 0
Отвечает Иванов Сергей.

Ответ:

#include <iostream>

using namespace std;

int main()

{

 long long int x, y, n, ans;

 cin >> x >> y >> n;

 if(n%(x+y)==0)

 {

     ans = n/(x+y)*2;

 }

 else if(n%(x+y)>y)

 {

     ans = n/(x+y)*2+2;

 }

 else

 {

     ans = n/(x+y)*2+1;

   }

   

   cout << ans;

   

 return 0;

}

Объяснение:

для g++(с++)

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи можно использовать динамическое программирование.

Давайте обозначим dp[i] как минимальное количество прыжков, необходимых для достижения ступеньки номер i.

Изначально, dp[0] = 0 (так как Марио уже находится на верхней ступеньке), а все остальные элементы массива dp инициализируются бесконечно большим значением (например, dp[i] = INF).

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

Для каждой ступеньки i мы можем рассмотреть два случая:

  1. Мы можем сделать короткий прыжок с предыдущей ступеньки: dp[i] = min(dp[i], dp[i - X] + 1).
  2. Мы можем сделать длинный прыжок с предыдущей ступеньки (если предыдущий прыжок был коротким): dp[i] = min(dp[i], dp[i - Y] + 1).

После перебора всех ступенек от 1 до N, значение dp[N] будет содержать минимальное количество прыжков, необходимых для преодоления всех ступенек.

Вот пример реализации данного подхода на языке Python:

python
def min_jumps(X, Y, N): dp = [float('inf')] * (N + 1) dp[0] = 0 for i in range(1, N + 1): if i - X >= 0: dp[i] = min(dp[i], dp[i - X] + 1) if i - Y >= 0 and dp[i - Y] != float('inf'): dp[i] = min(dp[i], dp[i - Y] + 1) return dp[N] # Пример использования X = 3 Y = 5 N = 10 result = min_jumps(X, Y, N) print(result) # Вывод: 4

Это решение работает за линейное время от количества ступенек N, что является эффективным для данной задачи.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос