Задача B. Тонкий и толстый

Автор:И. Туфанов   Ограничение времени: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
10 50 2 4 7 10
8 2
2
10 200 2 4 7 10
0 0

Разбор

Обозначим за 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-разрядные целые числа.


0.117s 0.012s 13