Advertisement
Guest User

Solution

a guest
Jan 31st, 2012
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 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.     if(a == 0 && b == 0)
  21.     {
  22.         x = 0;
  23.         y = 0;
  24.         if(c != 0)return false;
  25.         else return true;
  26.     }
  27.     if(a == 0)
  28.     {
  29.         x = 0;
  30.         if(c % b != 0)return false;
  31.         y = c / b;
  32.         return true;
  33.     }
  34.     if(b == 0)
  35.     {
  36.         y = 0;
  37.         if(c % a != 0)return false;
  38.         x = c / a;
  39.         return true;
  40.     }
  41.     int xg, yg;
  42.     d = gcd(a, b, xg, yg);
  43.     if(c % d != 0)return false;
  44.     x = xg * c / d;
  45.     y = yg * c / d;
  46.     return true;
  47. }
  48.  
  49. int main()
  50. {
  51.     int rx, ry, a, b;
  52.     cin >> rx >> ry >> a >> b;
  53.     int x0, y0, g;
  54.     if(!diof_solve(a, b, ry - rx, x0, y0, g))
  55.     {
  56.         cout << "-1\n";
  57.         return 0;
  58.     }
  59.     if(a == 0)
  60.     {
  61.         cout << max(-1, -y0) << "\n";
  62.         return 0;
  63.     }
  64.     if(b == 0)
  65.     {
  66.         cout << max(-1, x0) << "\n";
  67.         return 0;
  68.     }
  69.     int kl, kh;
  70.     kl = -x0*g/b;
  71.     kh = y0*g/a;
  72.     if(x0*g % b != 0 && -x0 * g * b > 0)kl++;
  73.     if(y0*g % a != 0 && y0 * g * a > 0)kh++;
  74.     int k = max (kl, kh);
  75.     cout << max(x0 + k * b / g - y0 + k * a / g, -1) << '\n';
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement