#include <iostream>
typedef long long ll;
using namespace std;
bool ll_is_valid(ll t, ll N, ll x, ll y)
{
return t / x + (t - x) / y >= N;
}
ll f(ll N, ll x, ll y)
ll R = 1;
while (!ll_is_valid(R,N,x,y)) R *= 2;
ll L = R / 2;
while(R - L > 1)
ll M = (L + R) / 2;
if (!ll_is_valid(M,N,x,y)) {L = M;}
else {R = M;}
return R;
int main()
ll N,x,y;
cin >> N >> x >> y;
if(x > y) swap( x, y );
cout << f(N, x, y) << std::endl;
Координаты даны в двоичной системе счисления, поэтому переводим их в десятичную.
Потом сортируем по порядку по номерам точек.
И отмечаем точки на графике, соединяя соседние отрезком.
Я все эти преобразования сделал в таблице Эксель.
Саму таблицу и картинку, полученную после нанесения всех точек смотри внизу.
А вот координаты точек, отсортированные и в десятичной системе:
№ x y
1 11 7
2 12 7
3 13 6
4 13 5
5 14 6
6 15 6
7 16 5
8 15 5
9 12 3
10 10 1
11 7 1
12 5 2
13 4 1
14 2 2
15 3 2
16 4 3
17 3 6
18 1 7
19 3 8
20 4 8
21 5 7
22 6 5
23 7 6
24 9 6
25 8 5
26 7 5
27 8 4
28 10 4
29 12 5
30 12 6
31 11 7
#include <iostream>
typedef long long ll;
using namespace std;
bool ll_is_valid(ll t, ll N, ll x, ll y)
{
return t / x + (t - x) / y >= N;
}
ll f(ll N, ll x, ll y)
{
ll R = 1;
while (!ll_is_valid(R,N,x,y)) R *= 2;
ll L = R / 2;
while(R - L > 1)
{
ll M = (L + R) / 2;
if (!ll_is_valid(M,N,x,y)) {L = M;}
else {R = M;}
}
return R;
}
int main()
{
ll N,x,y;
cin >> N >> x >> y;
if(x > y) swap( x, y );
cout << f(N, x, y) << std::endl;
}
Координаты даны в двоичной системе счисления, поэтому переводим их в десятичную.
Потом сортируем по порядку по номерам точек.
И отмечаем точки на графике, соединяя соседние отрезком.
Я все эти преобразования сделал в таблице Эксель.
Саму таблицу и картинку, полученную после нанесения всех точек смотри внизу.
А вот координаты точек, отсортированные и в десятичной системе:
№ x y
1 11 7
2 12 7
3 13 6
4 13 5
5 14 6
6 15 6
7 16 5
8 15 5
9 12 3
10 10 1
11 7 1
12 5 2
13 4 1
14 2 2
15 3 2
16 4 3
17 3 6
18 1 7
19 3 8
20 4 8
21 5 7
22 6 5
23 7 6
24 9 6
25 8 5
26 7 5
27 8 4
28 10 4
29 12 5
30 12 6
31 11 7