Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- #define pb push_back
- #define X first
- #define Y second
- #define sz(v) (int)v.size()
- void solve();
- main() {
- ios_base::sync_with_stdio(0), cin.tie(0);
- #ifdef ONPC
- freopen("in.txt", "r", stdin);
- #endif
- int t = 1;
- //cin >> t;
- while (t--) solve();
- return 0;
- }
- ll gcd(ll a, ll b, ll &x, ll &y) {
- if (a == 0) {
- x = 0;
- y = 1;
- return b;
- }
- ll xx, yy;
- ll g = gcd(b % a, a, xx, yy);
- x = yy - (b / a) * xx;
- y = xx;
- return g;
- }
- bool find_any(ll a, ll b, ll c, ll &x, ll &y, ll &g) {
- g = gcd(a, b, x, y);
- if (c % g != 0) return false;
- x *= c / g;
- y *= c / g;
- return true;
- }
- void shift(ll &x, ll &y, ll a, ll b, ll cnt) {
- x += cnt * b;
- y -= cnt * a;
- }
- ll find_all(ll a, ll b, ll c, ll minx, ll maxx, ll miny, ll maxy) {
- ll x, y, g;
- if (!find_any(a, b, c, x, y, g)) return 0;
- a /= g;
- b /= g;
- shift(x, y, a, b, (minx - x) / b);
- if (x < minx) shift(x, y, a, b, 1);
- if (x > maxx) return 0;
- ll lx1 = x;
- shift(x, y, a, b, (maxx - x) / b);
- if (x > maxx) shift(x, y, a, b, -1);
- ll rx1 = x;
- shift(x, y, a, b, -(miny - y) / a);
- if (y < miny) shift(x, y, a, b, -1);
- if (y > maxy) return 0;
- ll lx2 = x;
- shift(x, y, a, b, -(maxy - y) / a);
- if (y > maxy) shift(x, y, a, b, 1);
- ll rx2 = x;
- if (lx2 > rx2) swap(lx2, rx2);
- ll lx = max(lx1, lx2);
- ll rx = min(rx1, rx2);
- return (rx - lx) / b + 1;
- }
- ll n, a, b;
- void solve() {
- long long nn, aa, bb;
- cin >> nn >> aa >> bb;
- n = nn;
- a = aa;
- b = bb;
- ll all = (a + 1) * (b + 1);
- ll cur = find_all(2, 3, n, 0, a, 0, b);
- ll g = __gcd(all, cur);
- if (cur == 0) {
- cout << 0;
- return;
- }
- if (cur == all) {
- cout << 1;
- return;
- }
- all /= g;
- cur /= g;
- string s = "";
- while (cur) {
- s += char(cur % 10 + '0');
- cur /= 10;
- }
- reverse(s.begin(), s.end());
- cout << s << '/';
- s = "";
- while (all) {
- s += char('0' + all % 10);
- all /= 10;
- }
- reverse(s.begin(), s.end());
- cout << s;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement