d_i's blog

By d_i, 13 years ago, In Russian

Всем здравствуйте.

Есть вот такая задача : http://www.e-olimp.com/problems/875
Кратко : есть уравнение вида a * x + b * y = c. Нужно максимизировать (x + y).
Для решения использую следующую схему:
1. Находим такие корни (xg, yg), что a * xg + b * yg = gcd(a, b)
2. Далее находим, так сказать, первоначальные корни :
x0 = xg + (c / gcd(a, b))
y0 = yg + (c / gcd(a, b))
3. И теперь мы можем найти все решения данного уравнения по :
x = x0 + k * (b / gcd(a, b))
y = y0 - k * (a / gcd(a, b))

Проблема именно в том, что для того чтобы максимизировать (x + y) нужно брать какой то коэффициент k. А как его найти при таких ограничениях?Как-то линейно или, возможно, бинпоиском к примеру?
  • Vote: I like it
  • +7
  • Vote: I do not like it