Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int gcd(int a, int b, int &ca, int& cb)
- {
- if(a == 0)
- {
- ca = 0;
- cb = 1;
- return b;
- }
- int ta, tb;
- int g = gcd(b%a, a, ta, tb);
- ca = tb - (b / a) * ta;
- cb = ta;
- return g;
- }
- bool diof_solve(int a, int b, int c, int& x, int& y, int &d)
- {
- if(a == 0 && b == 0)
- {
- x = 0;
- y = 0;
- if(c != 0)return false;
- else return true;
- }
- if(a == 0)
- {
- x = 0;
- if(c % b != 0)return false;
- y = c / b;
- return true;
- }
- if(b == 0)
- {
- y = 0;
- if(c % a != 0)return false;
- x = c / a;
- return true;
- }
- int xg, yg;
- d = gcd(a, b, xg, yg);
- if(c % d != 0)return false;
- x = xg * c / d;
- y = yg * c / d;
- return true;
- }
- int main()
- {
- int rx, ry, a, b;
- cin >> rx >> ry >> a >> b;
- int x0, y0, g;
- if(!diof_solve(a, b, ry - rx, x0, y0, g))
- {
- cout << "-1\n";
- return 0;
- }
- if(a == 0)
- {
- cout << max(-1, -y0) << "\n";
- return 0;
- }
- if(b == 0)
- {
- cout << max(-1, x0) << "\n";
- return 0;
- }
- int kl, kh;
- kl = -x0*g/b;
- kh = y0*g/a;
- if(x0*g % b != 0 && -x0 * g * b > 0)kl++;
- if(y0*g % a != 0 && y0 * g * a > 0)kh++;
- int k = max (kl, kh);
- cout << max(x0 + k * b / g - y0 + k * a / g, -1) << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement