Некоторый алгоритм из одной цепочки символов получает новую цепочку следующим образом. сначала вычисляется длина исходной цепочки символов; если она чётна, то в начало цепочки символов добавляется цифра 1, а если нечётна, то средний символ цепочки удаляется. в полученной цепочке символов каждая цифра заменяется следующей за ней цифрой (1 — на 2, 2 — на 3 и т. д., а 9 — на 0). получившаяся таким образом цепочка является результатом работы алгоритма.например, если исходной была цепочка 2вм, то результатом работы алгоритма будет цепочка 3м, а если исходной была цепочка п9, то результатом работы алгоритма будет цепочка 2по.дана цепочка символов 28мая. какая цепочка символов получится, если к данной цепочке применить описанный алгоритм дважды (т. е. применить алгоритм к данной цепочке, а затем к результату вновь применить алгоритм)?
1) k=32*40*64= 81920
I= 81920*8= 655360 бит
655360 бит/8= 81920 байт
81920 байт/1024= 80 Кбайт
ответ: 80 Кбайт
2)k=48*40*40= 76800
I=76800*8= 614400 бит
614400 бит/8= 76800 байт
76800 байт/1024= 75 Кбайт
ответ: 75 Кбайт
3)k=64*40*48= 122880
I=122880*8= 983040 бит
983040 бит/8= 122880 байт
122880 байт/1024= 120 Кбайт
ответ: 120 Кбайт
4)k=64*40*64= 163840
I=163840*8= 1310720 бит
1310720 бит/8=163840 байт
163840 байт/1024= 160 Кбайт
ответ: 160 Кбайт
#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;
}