Advertisement
Guest User

Solution

a guest
Jan 31st, 2012
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int gcd(int a, int b, int &ca, int& cb)
  5. {
  6.     if(a == 0)
  7.     {
  8.         ca = 0;
  9.         cb = 1;
  10.         return b;
  11.     }
  12.     int ta, tb;
  13.     int g = gcd(b%a, a, ta, tb);
  14.     ca = tb - (b / a) * ta;
  15.     cb = ta;
  16.     return g;
  17. }
  18. bool diof_solve(int a, int b, int c, int& x, int& y, int &d)
  19. {
  20.     int xg, yg;
  21.     d = gcd(a, b, xg, yg);
  22.     if(c % d != 0)return false;
  23.     x = xg * c / d;
  24.     y = yg * c / d;
  25.     return true;
  26. }
  27.  
  28. int main()
  29. {
  30.     int rx, ry, a, b;
  31.     cin >> rx >> ry >> a >> b;
  32.     int x0, y0, g;
  33.     if(!diof_solve(a, b, ry - rx, x0, y0, g))
  34.     {
  35.         cout << "-1\n";
  36.         return 0;
  37.     }
  38.     int kl, kh;
  39.     kl = x0*g/(-b);
  40.     kh = y0*g/a;
  41.     if(x0*g % b != 0)kl++;
  42.     if(y0*g % a != 0)kh++;
  43.     int k = max (kl, kh);
  44.     cout << max(x0 + k * b / g - y0 + k * a / g, -1) << '\n';
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement