Информатика, вопрос задал soc0111 , 1 год назад

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

Ответы на вопрос

Ответил fivaproldzh1337
0

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

}

Новые вопросы