1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
a, b : array [1..n] of integer;
i, max, min, p, imax, imin : integer;
begin
randomize;
writeln('исходный массив a[]:');
for i := 1 to n do
begin
a[i] := random(50) - 25;
write(a[i]:8)
end;
writeln;
{формируем и выводим новый}
{сразу осуществляем поиск максимума и минимума}
max := -1000; min := 1000;
writeln('новый массив b[]:');
for i := 1 to n do
begin
b[i] := a[i] * a[i] * a[i];
write(b[i]:8);
if b[i] > max then
begin
imax := i;
max := b[i]
end;
if b[i] < min then
begin
imin := i;
min := b[i]
end
end;
writeln;
{считаем произведение и выводим результаты}
p := max * min;
writeln('максимальный элемент нового массива - b[', imax, '] = ', max);
writeln('минимальный элемент нового массива - b[', imin, '] = ', min);
writeln('их произведение = ', p);
readln
end.
#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;
}