|
1 | 1 | struct Fraction {
|
2 | 2 | ll numerator, denominator;
|
3 | 3 |
|
4 |
| - Fraction(ll n = 0, ll d = 1) { |
5 |
| - ll g = gcd(n, d); |
| 4 | + Fraction (ll n = 0, ll d = 1) { |
| 5 | + ll g = gcd (n, d); |
6 | 6 | n /= g;
|
7 | 7 | d /= g;
|
8 |
| - if(d < 0)n *= -1; |
9 |
| - d = abs(d); |
10 |
| - if(d == 0)n = abs(n); |
| 8 | + if (d < 0)n *= -1; |
| 9 | + d = abs (d); |
| 10 | + if (d == 0)n = abs (n); |
11 | 11 | numerator = n;
|
12 | 12 | denominator = d;
|
13 | 13 | }
|
14 | 14 |
|
15 |
| - Fraction operator+(const Fraction &o) const { |
16 |
| - return Fraction(numerator * o.denominator + denominator * o.numerator, denominator * o.denominator); |
| 15 | + Fraction operator+ (const Fraction &o) const { |
| 16 | + return Fraction (numerator * o.denominator + denominator * o.numerator, denominator * o.denominator); |
17 | 17 | }
|
18 | 18 |
|
19 |
| - Fraction operator+(const ll &o) const { |
20 |
| - return *this + Fraction(o, 1); |
| 19 | + Fraction operator+ (const ll &o) const { |
| 20 | + return *this + Fraction (o, 1); |
21 | 21 | }
|
22 | 22 |
|
23 |
| - Fraction operator-(const Fraction &o) const { |
24 |
| - return Fraction(numerator * o.denominator - denominator * o.numerator, denominator * o.denominator); |
| 23 | + Fraction operator- (const Fraction &o) const { |
| 24 | + return Fraction (numerator * o.denominator - denominator * o.numerator, denominator * o.denominator); |
25 | 25 | }
|
26 | 26 |
|
27 |
| - Fraction operator*(const Fraction &o) const { |
28 |
| - return Fraction(numerator * o.numerator, denominator * o.denominator); |
| 27 | + Fraction operator* (const Fraction &o) const { |
| 28 | + return Fraction (numerator * o.numerator, denominator * o.denominator); |
29 | 29 | }
|
30 | 30 |
|
31 |
| - Fraction operator/(const Fraction &o) const { |
32 |
| - return Fraction(numerator * o.denominator, denominator * o.numerator); |
| 31 | + Fraction operator/ (const Fraction &o) const { |
| 32 | + return Fraction (numerator * o.denominator, denominator * o.numerator); |
33 | 33 | }
|
34 | 34 |
|
35 |
| - bool operator<(const Fraction &o) const { |
| 35 | + bool operator< (const Fraction &o) const { |
36 | 36 | return numerator * o.denominator < o.numerator * denominator;
|
37 | 37 | }
|
38 | 38 |
|
39 |
| - bool operator==(const Fraction &o) const { |
| 39 | + bool operator== (const Fraction &o) const { |
40 | 40 | return numerator * o.denominator == o.numerator * denominator;
|
41 | 41 | }
|
| 42 | + |
| 43 | + bool operator<= (const Fraction &o) const { |
| 44 | + return *this < o or *this == o; |
| 45 | + } |
| 46 | + |
| 47 | + bool operator> (const Fraction &o) const { |
| 48 | + return !(*this <= o); |
| 49 | + } |
| 50 | + |
| 51 | + bool operator>= (const Fraction &o) const { |
| 52 | + return !(*this < o); |
| 53 | + } |
| 54 | + |
| 55 | + friend ostream &operator<< (ostream &out, const Fraction &f) { |
| 56 | + out<<f.numerator<<"/"<<f.denominator; |
| 57 | + return out; |
| 58 | + } |
| 59 | + |
| 60 | + friend Fraction smallest_fraction_in_interval (Fraction a, Fraction b); |
42 | 61 | };
|
43 | 62 |
|
44 |
| -ostream &operator<<(ostream &out, const Fraction &f) { |
45 |
| - out << f.numerator << " " << f.denominator; |
46 |
| - return out; |
47 |
| -} |
48 |
| - |
49 |
| -Fraction smallest_fraction_in_interval(Fraction a, Fraction b) { |
50 |
| - if(b < a)swap(a, b); |
51 |
| - if(a.numerator >= a.denominator) { |
| 63 | +//满足 a/b < p/q < c/d 的分数 p/q,分母最小的是多少 |
| 64 | +Fraction smallest_fraction_in_interval (Fraction a, Fraction b) { |
| 65 | + if (b < a)swap (a, b); |
| 66 | + if (a.numerator >= a.denominator) { |
52 | 67 | ll d = a.numerator / a.denominator;
|
53 | 68 | a.numerator -= a.denominator * d;
|
54 | 69 | b.numerator -= b.denominator * d;
|
55 |
| - return smallest_fraction_in_interval(a, b) + d; |
| 70 | + return smallest_fraction_in_interval (a, b) + d; |
56 | 71 | }
|
57 |
| - if(b.numerator > b.denominator)return Fraction(1, 1); |
58 |
| - swap(a.numerator, a.denominator); |
59 |
| - swap(b.numerator, b.denominator); |
60 |
| - auto ans = smallest_fraction_in_interval(b, a); |
61 |
| - swap(ans.numerator, ans.denominator); |
| 72 | + if (b.numerator > b.denominator)return Fraction (1, 1); |
| 73 | + swap (a.numerator, a.denominator); |
| 74 | + swap (b.numerator, b.denominator); |
| 75 | + auto ans = smallest_fraction_in_interval (b, a); |
| 76 | + swap (ans.numerator, ans.denominator); |
62 | 77 | return ans;
|
63 | 78 | }
|
0 commit comments