Submission

Status:

PP------PP

Subtask/Task Score:

40/100

Score: 40

User: mfs

Problemset: Fraction

Language: cpp

Time: 0.003 second

Submitted On: 2025-10-07 16:17:18

#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
    return __gcd(a,b);
}
int lcm(int a, int b) {
    return a*b/__gcd(a,b);
}
int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    int a0,b0; cin >> a0 >> b0;
    int q; cin >> q;
    while (q--) {
        char op; cin >> op;
        int a1,b1; cin >> a1 >> b1;
        int res;
        if (op == '+') {
            if (b0 == b1) {
                res = a0+a1;
                if (res == 0) {
                    cout << 0 << ' ' << 1 << '\n';
                    a0 = 0, b0 = 1;
                } else {
                    cout << res/gcd(res,b0) << ' ' << b0/gcd(res,b0) << '\n';
                    a0 = res/gcd(res,b0), b0 = b0/gcd(res,b0);
                }
            }
            else {
                int mul = b0*b1;
                res = (a0*(mul/b0)+a1*(mul/b1));
                if (res == 0) {
                    cout << 0 << ' ' << 1 << '\n';
                    a0 = 0, b0 = 1;
                } else {
                    cout << res/gcd(res,mul) << ' ' << mul/(gcd(res,mul)) << '\n';
                    a0 = res/gcd(res,mul), b0 = mul/(gcd(res,mul));
                }
            }
        } else if (op == '-') {
            if (b0 == b1) {
                res = a0-a1;
                if (res == 0) {
                    cout << 0 << ' ' << 1 << '\n';
                    a0 = 0, b0 = 1;
                } else {
                    cout << res/gcd(res,b0) << ' ' << b0/gcd(res,b0) << '\n';
                    a0 = res/gcd(res,b0), b0 = b0/gcd(res,b0);
                }
            }
            else {
                int mul = b0*b1;
                res = (a0*(mul/b0)-a1*(mul/b1));
                if (res == 0) {
                    cout << 0 << ' ' << 1 << '\n';
                    a0 = 0, b0 = 1;
                } else {
                    cout << res/gcd(res,mul) << ' ' << mul/(gcd(res,mul)) << '\n';
                    a0 = res/gcd(res,mul), b0 = mul/(gcd(res,mul));
                }
            }
        } else if (op == '*') {
            int up = a0*a1, down = b0*b1;
            cout << up/(gcd(abs(up),down)) << ' ' << down/(gcd(abs(up),down)) << '\n';
            a0 = up/(gcd(abs(up),down)), b0 = down/(gcd(abs(up),down));
        } else if (op == '/') {
            int up = abs(a0*b1), down = abs(b0*a1);
            if ((a0 < 0 && a1 > 0) || (a0 > 0 && a1 < 0))  up = -up;
            cout << up/(gcd(abs(up),down)) << ' ' << down/(gcd(abs(up),down)) << '\n';
            a0 = up/(gcd(abs(up),down)), b0 = down/(gcd(abs(up),down));
        }
    }
}