#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;
}
Если исходить из этих данных, то задача на логику, вариантов решения много. Именно в количестве учеников.
Объяснение:
1 вариант
Т.к. количество учеников не известно, то мы возьмём произвольно.
25x+25y+25z+25q=25
100×(x+y+z+q)=25
(x+y+z+q)= 100÷25
(x+y+z+q)= 4
Получилось 4 автобуса по 25 человек
Т.к. мы взяли 25 за количество учеников в каждом классе.
2 вариант
Берем произвольное количество учеников:
25+24+23+22=25
94×(х+у+z+q)=25
(х+у+z+q)=94÷25
(х+у+z+q)=3,76
Исходя из этого:
94-75=19( 3,76 - это автобус 3×25=75)
То, нужно 4 автобуса, но
3 автобуса по 25 человек и еще один 6 человек, а 19 мест свободных.
Или 4 автобуса по 23 человека и 2 места свободных в одном из автобусов.