Итак, задача очередного #BrainBreak по средам!
Напомню, что приз сегодня — это беспроводные наушники Xiaomi.
https://i.gyazo.com/5e2ef560d41777006ae7b37e215c0813.pngСпонсор приза — студия цифровых продуктов UNIT6.
Задача…
На дворе 2121 год.
Уже многие годы люди массово использовали биткоины и получали свои покупки прямо к себе в квартиру. И вот в 2121 людям захотелось снова начать ходить в олдскул-магазины и вернуться к использованию физических денег. Для взаиморасчетов люди решили использовать монеты, изготавливающиеся по секретной технологии из переработанного мусора с микрочипом из него же.
Заказчик хочет, чтобы вы написали программу для роботов-кассиров, которая будет вычислять наименьший набор монет для сдачи покупателю.
Заказчик в 2121 году в кассах наладил подачу неограниченного числа монет всех существующих номиналов прямо из хранилища местного банка.
Но еще в 2121 году банковская система возродилась из пепла и все немного по другому, например, сейчас в каждом городе можно выбирать номиналы монет любым удобным для его жителей образом.
Например, в городе Челябинске используются монеты номиналом 2, 4, 15 и 40. А в соседнем Екатеринбурге — 2, 4, 12 и 50.
Компания-заказчик хочет наладить работу во всех городах своего присутствия, так что программа должна работать с любым набором монет в любом городе.
На входе программе будет передаваться сумма, которую нужно сдать покупателю, и номиналы монет, которые есть в городе, отсортированные по возрастанию.
Входные данные будут передаваться в stdin в виде положительных целых чисел, каждое на новой строке. Окончание ввода — число 0.
На выходе нужно сказать, можно ли набрать сдачу (YES/NO), и если да — сколько и каких монет нужно набрать (в той же последовательности, что было на входе и в формате «НОМИНАЛ х КОЛИЧЕСТВО»).
Пример входных данных для запроса сдачи 514 денег с номиналами 3 и 5 монет:
514
3
5
0
На этот набор программа должна ответить:
YES
3 x 3
5 x 101
Пример входных данных для запроса сдачи 27 денег с номиналами 5 и 13 монет:
27
5
13
0
Такую сумму с такими номиналами набрать нельзя, поэтому программа должна ответить так:
NO
* За покупателей переживать не нужно, магазины при ответе NO должны сдавать больше, чем положено — робот-кассир при таком ответе программы запросит посчитать сдачу для 28 денег, если и там будет NO, то 29, потом 30… и так до тех пор, пока не получит YES… говорят, что при таком подходе сдача иногда может оказаться больше, чем покупатель заплатил за товар и особо умные жители могут покупать товары и увеличивать свой капитал, если догадаются, как это сделать
Решения принимаются только в виде ссылок на ваш код в
http://ideone.comКод будет проверяться там же, в ideone, и он должен корректно компилироваться и правильно выполняться с нашими тестовыми данными, иначе решение не принимается (обратите внимание на ограничения платформы, 15 секунд на выполнение и 256 мегабайт).
Свои решения присылайте на unit6contest@gmail.com
С решением желательно написать свое имя и логин в телеграм, чтобы в случае победы было удобнее объявлять победителя в чате.
Победителем будет первое правильное решение (дату/время проверяем по полю created в ideone).
Окончание приема решений — суббота в 15:00.
Результаты будут опубликованы по окончании приема решений или раньше, посмотрим по ситуации.
Засчитываться будет только 1 последний вариант от каждого автора на момент проверки.
Если вы исправили своё решение, нужно повторно написать письмо, чтобы мы могли проверить ваше решение ещё раз.
* Ограничения на входные данные — сумма для сдачи от 1 до 1500, количество разных номиналов монет от 1 до 20, номиналы монет от 1 до 99.
* Приз выдается самовывозом в Челябинске, место самовывоза отдельно согласовывается спонсором приза с победителем. Победитель может переуступить приз кому угодно.