Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: APNICHANAN

Problemset: Fraction

Language: cpp

Time: 0.004 second

Submitted On: 2025-10-08 19:31:44

#include <iostream>
using namespace std;
long long gcd(long long a, long long b)
{
    a = abs(a);
    b = abs(b);
    if (b == 0)
        return a;
    else
        return gcd(b, a % b);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    long long a, b, n;
    cin >> a >> b >> n;
    long long x[n], y[n];
    char o[n];
    for (long long i = 0; i < n; i++)
        cin >> o[i] >> x[i] >> y[i];
    long long lcm, gcdab;
    for (long long i = 0; i < n; i++)
    {
        if (o[i] == '+')
        {
            lcm = (b / gcd(b, y[i])) * y[i];
            a *= lcm / b;
            x[i] *= lcm / y[i];
            b = lcm;
            a += x[i];
            gcdab = gcd(a, b);
            a /= gcdab;
            b /= gcdab;
            if (b < 0)
            {
                b = abs(b);
                a *= -1;
            }
            if (a == 0)
                a = 0, b = 1;
            cout << a << " " << b << endl;
        }
        else if (o[i] == '-')
        {
            lcm = (b / gcd(b, y[i])) * y[i];
            a *= lcm / b;
            x[i] *= lcm / y[i];
            b = lcm;
            a -= x[i];
            gcdab = gcd(a, b);
            a /= gcdab;
            b /= gcdab;
            if (b < 0)
            {
                b = abs(b);
                a *= -1;
            }
            if (a == 0)
                a = 0, b = 1;
            cout << a << " " << b << endl;
        }
        else if (o[i] == '*')
        {
            a *= x[i];
            b *= y[i];
            gcdab = gcd(a, b);
            a /= gcdab;
            b /= gcdab;
            if (b < 0)
            {
                b = abs(b);
                a *= -1;
            }
            if (a == 0)
                a = 0, b = 1;
            cout << a << " " << b << endl;
        }
        else if (o[i] == '/')
        {
            a *= y[i];
            b *= x[i];
            gcdab = gcd(a, b);
            a /= gcdab;
            b /= gcdab;
            if (b < 0)
            {
                b = abs(b);
                a *= -1;
            }
            if (a == 0)
                a = 0, b = 1;
            cout << a << " " << b << endl;
        }
    }
}