ACM SGU/volume 1/106

Материал из testwiki
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

106. The equation

Условие

Необходимо найти количество целых решений уранения ax+by+c=0 таких, что x1xx2 и y1yy2.


Ограничения

108a,b,c,x1,x2,y1,y2108 Все числа целые.


Решение с помощью бинарного поиска

Для начала рассмотрим отдельно случаи, когда a=0 или b=0. Сделать это несложно.

Теперь найдём любую пару (x0;y0), что ax0+by0=GCD(a,b). Здесь GCD(a,b) — Наибольший Общий Делитель двух чисел. Найти такую пару можно с помощью Алгоритма Евклида за O(logN). Несложно доказать, что все решения теперь будут иметь вид:


{x=x0(c/GCD(a,b))+kb/GCD(a,b)y=y0(c/GCD(a,b))ka/GCD(a,b)


Отсюда следует, что если cmodGCD(a,b)0, то решений нет.

Теперь с помощью бинарного поиска (так как функции вида «точка (x1,y1) левее/правее точки (x2,y2)» являются монотонными) мы можем найти такие коэффициенты k1,k2, что точки (xk1,yk1) и (xk2,yk2) являются крайними точками решения. Очевидно, что тогда ответом задачи будет число |k1k2|+1.