Есть две копировальных машины, одна делает копию документа за x минут, а вторая — за y минут. требуется получить n копий некоторого документа. за какое минимальное время это возможно сделать? изначально документ существует в одном экземпляре. формат ввода в единственной строке даны три числа, разделенные пробелом: n, x, y (1 ≤ x, y ≤ 10, 1 ≤ n ≤ 2*108). формат вывода выведите одно число — минимальное время, за которое можно получить n копий документа (в минутах).

mani09091 mani09091    1   14.07.2019 17:50    4

Ответы
seregapomogite seregapomogite  20.09.2020 16:56

#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;

}

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика