Source Code

/*
    # Enjoy the journey #
*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define forq(i , a , b) for (int i = (a); i <= (b); ++i)
#define qrof(i , b , a) for (int i = (a); i >= (b); --i)
#define forr(i , b) forq( i , 0 , b - 1 )
#define F first
#define S second
#define IF ->first
#define IS ->second
#define endl '\n'
#define qqmemset(array , val) memset (array , val , sizeof(array))
#define ALLV(vect) vect.begin() , vect.end()
#define mid (st + en) / 2
#define mid1 (2 * st + en) / 3
#define mid2 (2 * en + st) / 3
#define lef 2 * Node
#define rig lef + 1
mt19937 rng( chrono::steady_clock::now().time_since_epoch().count() );
#define Ran(a, b) rng() % ( (b) - (a) + 1 ) + (a)

ll R = 7 + 1e9 , R1 = 19491001 , R2 = 236 , NUMTESTCASE ;
const ll NN = 10 + 1e6 ;
const double pi = acos(-1.0) ;
int di [8] = {1 , 0 , -1 , 0  , 1 , -1 , 1  , -1 } , dj [8] = {0 , 1 , 0  , -1 , 1 , -1 , -1 , 1  } ;

int main()
{
    ll a , b , lx , ly , rx , ry ;
    cin >> a >> b >> lx >> rx >> ly >> ry ;
    pair <ll,ll> Ans = {lx , ly} ;
    for (ll y = ly ; y <= ry ; y ++) {
        ll st = lx , en = rx , res = lx ;
        auto Calc = [&] (ll x , ll y) {
            return abs(x * b - a * y) ;
        };
        while (st <= en)
            if (Calc (mid , y) < Calc (mid + 1 , y))
                res = mid , en = mid - 1 ;
            else st = mid + 1;

        for (int x = max(st - 3 , lx) ; x <= min(en + 3 , rx); x ++)
            if (Calc (x , y) < Calc (res , y))
                res = x ;

        if (y * Calc (Ans.F , Ans.S) > Ans.S * Calc (res , y))
            Ans = {res , y} ;
    }
    cout << Ans.F << " " << Ans.S ;
    return 0;
}
Copy
Fractions you_dont_know_me
GNU G++17
97 ms
1.1 MB
Accepted