Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- using namespace std;
- typedef pair<ll , ll> pll;
- #define S second
- #define F first
- inline pll getLeft(pll a)
- {
- return pll(a.F ,a.F + a.S);
- }
- inline pll getRight(pll a)
- {
- return pll(a.F + a.S ,a.S);
- }
- inline pll getFather(pll a)
- {
- return a.S > a.F ? pll(a.F ,a.S - a.F) : pll(a.F - a.S ,a.S);
- }
- pll getNext(pll cur)
- {
- pll last = cur;
- cur = getFather(cur);
- int cnt = 0;
- while( last == getRight(cur) )
- {
- cnt += 1;
- last = cur;
- cur = getFather(cur);
- }
- cur = getRight(cur);
- while( cnt )
- {
- cnt -= 1;
- cur = getLeft(cur);
- }
- return cur;
- }
- void Solve()
- {
- ll k;
- cin >> k;
- cout << k << ' ';
- string buffer;
- cin >> buffer;
- for(char &i : buffer)
- {
- if( i == '/' )
- {
- i = ' ';
- break;
- }
- }
- pll cur;
- stringstream st(buffer);
- st >> cur.F >> cur.S;
- if( !cur.F || !cur.S )
- {
- cout << 1 << '/' << 1 << endl;
- return;
- }
- if( cur.S == 1 )
- {
- cout << 1 << '/' << cur.F + cur.S << endl;
- return;
- }
- pll nxt = getNext(cur);
- cout << nxt.F << '/' << nxt.S << endl;
- }
- int main()
- {
- int Tc;
- cin >> Tc;
- while( Tc-- ) Solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement