分數等式判斷(結構體版)

1.0s 256M

這題是分數等式判斷的結構體版:輸入輸出與原題完全相同。請把每個分數包成一個結構體 Fraction(建議成員:分子 p、分母 q;建構子自動約分並讓分母保持為正,再多載 + 與 ==),用第十四單元的寫法重寫一次——原題你當時是自己通分、交叉相乘的;這次把這些規則收進結構體,主程式應該只剩一行。

下面這支主程式已經寫好了,把你的 Fraction(含建構子、operator +、operator ==)貼進空位就能通過這題:

#include <iostream>
#include <numeric>
using namespace std;

// ===== 把你的 struct Fraction 貼在這裡 =====



// ==========================================

int main() {
    long long a, b, c, d, e, f;
    cin >> a >> b >> c >> d >> e >> f;
    cout << (Fraction(a, b) + Fraction(c, d) == Fraction(e, f)) << '\n';
    return 0;
}

給定六個整數 \(a,b,c,d,e,f\),請判斷:

\[\frac{a}{b}+\frac{c}{d}\]

是否與:

\[\frac{e}{f}\]

完全相等。

浮點數只能儲存近似值。即使把 double 換成精度更高的 long double,直接使用 == 仍然可能失敗。例如下面的程式就不是正確 做法:

#include <iostream>
using namespace std;

int main() {
    long long a, b, c, d, e, f;
    cin >> a >> b >> c >> d >> e >> f;
    cout << ((long double)a / b + (long double)c / d
             == (long double)e / f) << '\n';
}

請使用整數運算精確判斷。測資限制保證在正確的交叉相乘過程中,所有 中間結果都能存進 long long;用結構體「先約分、再通分相加」的中間結果也一樣存得進 long long。

輸入格式

輸入一行,包含六個整數 \(a,b,c,d,e,f\)。

限制

  • \(-46000 \le a,b,c,d \le 46000\)
  • \(-2116000000 \le e,f \le 2116000000\)
  • \(b\ne 0\)
  • \(d\ne 0\)
  • \(f\ne 0\)

輸出格式

若 \(\frac{a}{b}+\frac{c}{d}\) 與 \(\frac{e}{f}\) 完全相等,輸出 1; 否則輸出 0。

範例輸入 1

1 2 1 3 5 6

範例輸出 1

1

範例解釋 1

\(\frac{1}{2}+\frac{1}{3}=\frac{5}{6}\)。但是在評測環境中,上方錯誤 程式使用 long double 直接比較時會得到不相等。

範例輸入 2

1 2 1 3 4 5

範例輸出 2

0

範例輸入 3

1 3 1 5 8 15

範例輸出 3

1

題目頁說明

快速鍵

主要功能

  • 範例測試 — 執行題目附帶的範例測資並自動比對預期輸出。
  • 自訂測試 — 自己貼 stdin 執行程式。可勾選「與預期輸出比對 (diff)」做行對行比對。
  • 模板 — 貼上你在個人資料設定的預設程式碼模板。
  • 協作 — 與其他同學共筆編輯這題的程式碼。
  • 自動草稿 — 編輯器內容每 1.5 秒自動存到瀏覽器(per 帳號 / 題目 / 語言)。
  • 提交 — 把程式碼交給 judge 評測,回傳 AC / WA / TLE 等結果。

限制

  • 程式碼最多 65,536 字元
  • 自訂測試 stdin 與預期輸出各最多 1 MB (約 100 萬字元)
  • 自訂測試與範例測試共用一個沙箱,每人約 3 秒 1 次 (範例測試 1 秒 1 次)
  • 自訂測試與範例測試都有 15 秒 牆鐘上限(正式評測仍依題目原本時限)
  • 互動題不提供自訂測試(無法模擬與 judge 互動)。
  • 提交評測本身沒有 rate limit,但同題短時間內多次提交會被視為刷分。