爆0!!
查看原帖
爆0!!
707299
robert_w楼主2022/10/16 23:16

请个位大佬帮忙看一下,样例全过,但测试点全错。

#include <bits/stdc++.h>
using namespace std;
struct fra
{
    int x, y;
};
int gcd(int a, int b)
{
    if (b == 0)
    {
        return a;
    }
    return gcd(b, a % b);
}
int lcm(int a, int b)
{
    int fac, mul;
    fac = a * b;
    mul = gcd(max(a, b), min(a, b));
    return fac / mul;
}
fra fra_add(int a1, int b1, int a2, int b2)
{// 分数加法
    fra add;
    int t1, t2, lc;
    t1 = b1;
    t2 = b2;
    lc = lcm(max(b1, b2), min(b1, b2));
    a1 *= lc / t1;
    a2 *= lc / t2;
    add.x = a1 + a2;
    add.y = lc;
    return add;
}
fra fra_sub(int a1, int b1, int a2, int b2)
{// 分数减法
    fra sub;
    int t1, t2, lc;
    t1 = b1;
    t2 = b2;
    lc = lcm(max(b1, b2), min(b1, b2));
    a1 *= lc / t1;
    a2 *= lc / t2;
    sub.x = a1 - a2;
    sub.y = lc;
    return sub;
}
int main()
{
    int n;
    cin >> n;
    int a[n], b[n], o[n];
    cin >> a[0] >> b[0] >> o[0];
    for (int i = 1; i < n; i++)
    {
        cin >> a[i] >> b[i] >> o[i];
        if (o[i] == 1)
        {
            a[i] = fra_add(a[i - 1], b[i - 1], a[i], b[i]).x;
            b[i] = fra_add(a[i - 1], b[i - 1], a[i], b[i]).y;
        }
        else
        {
            a[i] = fra_sub(a[i - 1], b[i - 1], a[i], b[i]).x;
            b[i] = fra_sub(a[i - 1], b[i - 1], a[i], b[i]).y;
        }
    }// 边输入 边计算
    int mul = gcd(a[n - 1], b[n - 1]);
    if (mul == 1)
    {
        a[n - 1] /= mul;
        b[n - 1] /= mul;
    }
    if (a[n - 1] % b[n - 1] == 0)
    {
        cout << a[n - 1] / b[n - 1] << endl;
    }
    else
    {
        cout << a[n - 1] << "/" << b[n - 1] << endl;
    }
    return 0;
}
2022/10/16 23:16
加载中...