CodeChef Sharing Candies
解法
これは超典型的で, C, D の最大公約数 g に対して, abs(A+g*p - B) (p は任意の整数) としたときの最小値を求めればよいだけです。
ll solve() { ll A, B, C, D; cin >> A >> B >> C >> D; { ll mini = min(A, B); A -= mini; B -= mini; } if (A > B) { swap(A, B); swap(C, D); } ll g = __gcd(C, D); ll q = B%g; return min(q, g-q); } int main() { cin.tie(0); ios::sync_with_stdio(false); int T; cin >> T; while (T--) { cout << solve() << endl; } return 0; }