Michail's blog

By Michail, 12 years ago, In Russian

не прошу конечно-же решения, подкиньте пожалуйста идейку о том, как это реализовать наиболее изящно =) Задача: В любом банкомате в любой момент времени есть купюры различных достоинств, каждое достоинство представлено некоторым количеством купюр. После того, как человек отправляет запрос на выдачу ему некоторой суммы, программа, установленная в банкомате, определяет, сколько и каких купюр необходимо выдать этому человеку, и возможно ли в принципе выдать ему запрошенную сумму. Происходит это следующим образом. В первую очередь рассматриваются купюры самого большого достоинства. Их количество подбирается таким образом, чтобы выдать человеку на одну купюру больше было невозможно (так как или купюры этого достоинства закончились, или выданная сумма превысит запрошенную). После этого к выдаваемой сумме добавляются купюры достоинства, следующего по убыванию за наибольшим. Количество выдаваемых купюр второго по величине достоинства подсчитывается таким же образом. Так происходит до тех пор, пока выдаваемая сумма не будет в точности равна запрошенной, либо же пока не выяснится, что суммы не равны, а нерассмотренные достоинства купюр закончились. Важно, что такой алгоритм будет корректно работать только тогда, когда из двух купюр любых существующих номиналов один из номиналов нацело делится на второй. Итак, Вам необходимо разработать программу, обрабатывающую запросы к банкомату. По данным начальным количествам купюр, их достоинствам и запросам, данным в порядке поступления, необходимо сообщить, какие запросы будут удовлетворены, а какие нет. При этом, естественно, после удовлетворения запроса необходимо уменьшить количество купюр каждого достоинства на то, что было выдано пользователю. Формат входного файла В первой строке входного файла input.txt дано число N (1 ? N ? 10) — количество различных типов купюр. В следующих N строках входного файла описаны все возможные типы купюр. Каждый тип характеризуются двумя числами c и d (1 ? с ? 5000, 1 ? d ? 100) — номинал купюры и количество купюр такого номинала. Типы купюр даны в порядке убывания номинала. Для любых двух номиналов верно, что один из них нацело делится на второй. В следующей строке дано число M (1 ? M ? 100) — количество поступивших запросов. В следующих M строках описаны запросы. Каждый запрос характеризуется одним числом x (1 ? x ? 100000) — количеством денег, которое было запрошено. Формат выходного файла В выходной файл output.txt требуется вывести результаты обработки всех запросов в порядке поступления, по одному на строке. Про удовлетворенные запросы выведите "YES", про неудовлетворенные — "NO".

  • Vote: I like it
  • -16
  • Vote: I do not like it