Автор: | И. Туфанов | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 256 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 100 |
На финал чемпионата мира по программированию отправилось так много болельщиков (P человек), что для них пришлось организовать чартерные рейсы. Авиакомпания, доставляющая болельщиков, имеет в своем распоряжении N самолетов. По политическим соображениям, авиакомпания должна использовать для доставки пассажиров все имеющиеся самолёты.
Каждый самолет имеет две модификации. В модификации "Тонкий" самолет может поднять любое количество пассажиров в отрезке [a1, b1]. Перевозить меньше a1 пассажиров экономически невыгодно, а больше b1 пассажиров самолет просто не сможет поднять. В модификации "Толстый" самолет может поднять любое количество пассажиров в отрезке [a2, b2].
Требуется определить, можно ли распределить P болельщиков по N самолетам так, что все самолеты взлетят и их использование будет экономически выгодным. Каждый самолет может быть использован только в одном рейсе и в одной из модификаций.
N ≤ 1000
Во входном файле находятся целые числа N P a1 b1 a2 b2.
Если требуемая рассадка пассажиров существует, выведите два целых неотрицательных числа, дающие в сумме N: необходимое количество самолетов "тонкой" и "толстой" модификаций. Если существует несколько решений, выведите то, в котором количество самолетов "тонкой" модификации максимально. Если решения не существует, выведите два нуля через пробел.
1 ≤ N, P ≤ 109
1 ≤ a1 ≤ b1 < a2 ≤ b2 ≤ 109
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Обозначим за x количество "Толстых" самолетов. Тогда количество "Тонких" самолетов будет равно N − x. На x накладывается естественное ограничение 0 ≤ x ≤ N.
Минимальное количество человек, которое можно разместить в самолетах при фиксированном x составляет a1(N − x) + a2 x. Аналогично, максимальное количество составляет b1(N − x) + b2 x. Любое количество пассажиров между максимальным и минимальным легко можно расположить в самолетах следующим образом: сначала наполнить все самолеты минимальным количеством пассажиров a1(N − x) + a2 x, а затем добавлять их в первый самолет, пока он не заполнится, затем во второй и т.д.
Таким образом, чтобы при фиксированном x в самолетах разместить P человек, необходимо и достаточно, чтобы выполнялось условие
a1(N − x) + a2 x ≤ P ≤ b1(N − x) + b2 x.
Если изменять x в допустимых пределах от 0 до N, получаем ограничение на x:
P − a1 Na2 − a1 ≤ x ≤ P − b1 Nb2 − b1
Учтем и естественные ограничения на x. Тогда x должен удовлетворять условию L ≤ x ≤ R, где
L = max(0, P − a1 Na2 − a1), R = min(N, P − b1 Nb2 − b1)
По условию задачи нужно максимизировать количество самолетов "тонкой" модификации, то есть, минимизировать x. Значит, в качестве x нужно взять ближайшее справа к L целое число. Если это число превосходит R, тогда следует вывести в выходной файл "0 0".
Отметим, что задача может быть решена в целых числах, поскольку для округления дроби к ближайшему целому справа можно использовать целочисленное деление с прибавлением единицы, если числитель не делится нацело на знаменатель.
Отметим, что при вычислении числителя и знаменателя в приведенных выше формулах может возникнуть переполнение 32-разрядных целых чисел (с учетом ограничения 109 на все величины), поэтому следует использовать 64-разрядные целые числа.