|
Спирт
(Время: 1 сек. Память: 16 Мб Сложность: 10%)
Это самая простая задача олимпиады. Для определения максимально возможного числа молекул нужно сначала оценить эти количества для каждого элемента в отдельности. Например, если мы имеем C атомов углерода и сколько угодно много атомов других веществ, то не можем получить более чем C div 2 молекул спирта, т.к. каждая молекула состоит из двух таких атомов. Аналогично, мы не можем получить более H div 6 молекул спирта, имея не более H атомов водорода. Для кислорода число молекул не может превосходить число атомов. Таким образом, ответом на задачу будет служить минимальное значение из вышеописанных ограничений.
Алгоритмически задача решается очень просто:
read(c,h,o)
write(min(c div 2, min(h div 6, o)))
Но даже такая утешительная задача имеет «подводный камень», который скрывается в ограничениях на число атомов. Поскольку эти числа могут превышать значения максимального 4-байтового целого, то здесь нельзя гарантировать правильность решения с использованием таких типов как integer и longint в Паскале либо int и long int в Си. Здесь следует использовать 8-байтовый целый тип int64 или __int64 (в зависимости от языка). Так же возможно использовать большой вещественный тип (например, тип extended в Паскале) для хранения и обработки таких чисел, но здесь возникают некоторые сложности с делением и форматом вывода. Если же прибегать к длинной арифметике, то такой подход может «свести на нет» утешительность данной задачи.
| |