Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > Областная олимпиада тур 1 задача 3


Автор: Strannik 18.2.2007, 14:30
3. У Васи есть один пакет Donstar, на счету которого находится сумма So, и п пакетов dwater.
на каждом из которых есть определенная сумма денег 5,. Компания Donstar объявила новую
акцию "Плати бiльше та не розмовляй", и Вася хочет принять в ней участие. Для этого
необходимо, чтобы на счету была сумма не меньше S. Вася сейчас "на мели", поэтому он не
хочет покупать ваучер пополнения счета, чтобы пополнить свой "Donstar" до нужной суммы.

И выход есть - компания Donstar предоставляет своим абонентам такую услугу как передача
денег от одного абонента другому. При этом, пересылать можно только целое число гривен,
не меньшее 5, да так, чтобы на счету после этого осталось как минимум 5 гривен. Сама
пересылка стоит 10 копеек. Таким образом, чтобы совершить пересылку, на счету должно
быть как минимум 10 грн. 10 коп. dwater входит в сеть Donstar, поэтому абоненты dwater
тоже могут совершить пересылки на номера Donstar. Вася хочет пополнить свой счет
"Donstar" до суммы S за наименьшее число пересылок, поскольку каждая пересылка стоит 10
коп, а копейка, как известно, рубль, т.е. гривну, бережет.    
Задание. Написать программу TRANSFER, которая по заданным состояниям всех счетов    
находит наименьшее количество пересылок, необходимых для пополнения счета на карточке    
"Donstar" Васи до нужной суммы.
Входные данные. В первой строке текстового файла TRANSFER.DAT находится три целых    
числа: и- количество Васиных счетов dwater (0<и<1000), So- сумма денег на карточке    
"Donstar" и S - сумма, которую необходимо иметь на счету, чтобы вступить в акцию. Во    
второй строке записаны через пробел состояния счета на карточках dwater: S1, S2, ..., S„. Все    
числа S, Sj- действительные числа из промежутка [0.01,10000.00], заданные ровно с двумя       знаками после запятой (т.е. с точностью до копеек).    
Выходные данные. Вывести   в   единственной   строке  текстового   файла   TRANSFER.SOL
наименьшее количество пересылок, необходимых для того, чтобы Вася смог принять участие
в акции, или -1, если участие Васи в акции невозможно.
Пример входных и выходных данных
TRANSFER.DAT    TRANSFER.SOL
2  10.00  26.00    2
10.10  16.10

Если есть ошибки - извините, ФайнРидером перевёл в текст и не вычитывал особо...

Автор: FireSnake 23.2.2007, 18:27
Задача легкая, но никто не заметил, что передавать можно (и в некоторых тестах нужно)с дивотера на дивотер или с ДонСтара на дивотер. Ведь может возникнуть такая ситуация, что на счету одного дивотера скажем 7 грн и исходя из условия мы не можем перекинуть с него на ДонСтар, но можем перекинуть (если там есть соответствующая сумма)с ДонСтара все деньги на этот дватер и затем назад на Донстар. 

А так просто мы все сортировали и тупо жадничали. В итоге у меня задача набрала 36/100 балов. У Странника кажись так же

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)