結果
問題 | No.750 Frac #1 |
ユーザー | gemy |
提出日時 | 2023-11-22 08:05:44 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 3 ms / 1,000 ms |
コード長 | 2,773 bytes |
コンパイル時間 | 2,364 ms |
コンパイル使用メモリ | 206,984 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-26 07:24:24 |
合計ジャッジ時間 | 3,639 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 2 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 2 ms
5,376 KB |
testcase_11 | AC | 2 ms
5,376 KB |
testcase_12 | AC | 2 ms
5,376 KB |
testcase_13 | AC | 2 ms
5,376 KB |
testcase_14 | AC | 2 ms
5,376 KB |
testcase_15 | AC | 2 ms
5,376 KB |
testcase_16 | AC | 2 ms
5,376 KB |
testcase_17 | AC | 3 ms
5,376 KB |
testcase_18 | AC | 2 ms
5,376 KB |
testcase_19 | AC | 2 ms
5,376 KB |
testcase_20 | AC | 2 ms
5,376 KB |
testcase_21 | AC | 2 ms
5,376 KB |
testcase_22 | AC | 2 ms
5,376 KB |
testcase_23 | AC | 2 ms
5,376 KB |
testcase_24 | AC | 2 ms
5,376 KB |
testcase_25 | AC | 2 ms
5,376 KB |
testcase_26 | AC | 2 ms
5,376 KB |
testcase_27 | AC | 2 ms
5,376 KB |
testcase_28 | AC | 2 ms
5,376 KB |
testcase_29 | AC | 2 ms
5,376 KB |
testcase_30 | AC | 2 ms
5,376 KB |
testcase_31 | AC | 2 ms
5,376 KB |
testcase_32 | AC | 2 ms
5,376 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; // 有理数 Fraction (符号は分子に押し付ける) template <class T> class Fraction { public: // 分子と分母 (a over b) T a, b; // 0/1 で初期化 Fraction() : a(0), b(1) {} // a/b で初期化 Fraction(T a, T b = 1) { T g = gcd(a, b); this->a = (b > 0 ? a : -a) / g; this->b = abs(b) / g; } // 整数か判定 bool isint() { return b == 1; } // 絶対値 friend Fraction abs(const Fraction& r) { return Fraction(abs(r.a), r.b); } // 等しい friend bool operator==(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b == r1.b * r2.a; } // より小さい friend bool operator<(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b < r1.b * r2.a; } // より小さいか等しい friend bool operator<=(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b <= r1.b * r2.a; } // より大きい friend bool operator>(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b > r1.b * r2.a; } // より大きいか等しい friend bool operator>=(const Fraction& r1, const Fraction& r2) { return r1.a * r2.b >= r1.b * r2.a; } // 足し算 friend Fraction operator+(const Fraction& r1, const Fraction& r2) { return Fraction(r1.a * r2.b + r1.b * r2.a, r1.b * r2.b); } // 引き算 friend Fraction operator-(const Fraction& r1, const Fraction& r2) { return Fraction(r1.a * r2.b - r1.b * r2.a, r1.b * r2.b); } // 掛け算 friend Fraction operator*(const Fraction& r1, const Fraction& r2) { return Fraction(r1.a * r2.a, r1.b * r2.b); } // 割り算 friend Fraction operator/(const Fraction& r1, const Fraction& r2) { return Fraction(r1.a * r2.b, r1.b * r2.a); } // 自身への足し算 Fraction& operator+=(const Fraction& r) { *this = *this + r; return *this; } // 自身への引き算 Fraction& operator-=(const Fraction& r) { *this = *this - r; return *this; } // 自身への掛け算 Fraction& operator*=(const Fraction& r) { *this = *this * r; return *this; } // 自身への割り算 Fraction& operator/=(const Fraction& r) { *this = *this / r; return *this; } // 出力 friend ostream& operator<<(ostream& os, const Fraction& r) { os << r.a; if (r.b != 1) os << '/' << r.b; return os; } }; #define rep(i, n) for (int i = 0; i < (int)(n); ++i) int main() { // Input int n; cin >> n; vector<Fraction<int>> v(n); rep(i, n) cin >> v[i].a >> v[i].b; // Output sort(v.rbegin(), v.rend()); rep(i, n) cout << v[i].a << ' ' << v[i].b << endl; }