Предмет: Информатика,
автор: dimas8015
Задача 5: Финансовая реформа
Однажды после олимпиады по экономике Мише приснился очень красочный и необычный сон. Мальчик оказался министром финансов Берляндии. Осозна.
свою значимость, он тут же решил произвести в стране реформу. Раньше в Берляндии использовались банкноты с номиналами 1, 10, 100 и 1000 бурлей. Миш
данная система показалась крайне банальной, поэтому он решил придумать что-то свое.
Мальчик выбрал два целых числа хи у (Хs y) и заявил, что теперь в Берляндии будут использоваться только банкноты с номиналами x, x+1, x+2, ..., у бурлей
Вскоре реформа была принята и вступила в силу, однако населению страны это совсем не понравилось. Недовольства начались из-за того, что теперь
используя новые банкноты, можно было набрать далеко не любую сумму.
Например, если Мишей были выбраны числа х = 5 и =7, то невозможно набрать суммы 1, 2, 3 и 4 бурлей. Также не получится набрать суммы 8 и 9 бурлей-
Если же выбрать числа х= y= 2, то невозможно будет набрать любую нечетную сумму.
Миша, находясь на грани увольнения, решил успокоить население Берляндии и предъявить такое минимальное число N, что при помощи новых банкнот
возможно набрать любую сумму, начиная с N. Таким образом, должно быть возможно набрать суммы N бурлей, N + 1 бурлей, N + 2 бурлей, и так далее.
Помогите Мише найти искомое число и избежать увольнения.
Входные данные
В первой строке входных данных записано целое число х - минимальный номинал новых банкнот.
Во второй строке записано целое число у (1 <xs ys 2x109) - максимальный номинал новых банкнот.
Выходные данные
Выведите одно натуральное число N — минимальное число, такое, что при помощи банкнот с номиналами x, x+1, x+ 2, ..., у можно набрать любую сумму,
начиная с N бурлей.
Если такого числа не существует, в качестве ответа выведите -1.
Обратите внимание, что ответ может получиться достаточно большим, поэтому следует использовать 64-битный тип данных, например long long в C/C++, long в
Java и C#, int64 в Pascal.
Ответы
Автор ответа:
0
Ответ:
# ruby v3.2
@cache = {}
def has_decomposition?(x, y, n)
return @cache[n] if @cache.has_key?(n)
if n < x
@cache[n] = false
return false
elsif n.between?(x, y)
@cache[n] = true
return true
else
for i in x..y
next if !has_decomposition?(x, y, n - i)
@cache[n] = true
return true
end
@cache[n] = false
return false
end
end
def getN(x, y)
return -1 if x == y && x > 1
for n in x..(2*10**9)
found = true
for i in n..(2*n-1)
next if has_decomposition?(x, y, i)
found = false
break
end
return n if found
end
return -1
end
x = gets().to_i
y = gets().to_i
p getN(x, y)
Интересные вопросы
Предмет: Английский язык,
автор: victoriatenukus
Предмет: Русский язык,
автор: jadraaxmedova
Предмет: Английский язык,
автор: eskarinakarina757
Предмет: Математика,
автор: galekmuha
Предмет: Алгебра,
автор: angelinnka91