Итак, мы знаем что переходить мост нужно двум гномам одновременно, 1 остаётся, второй возвращает фонарь назад и переводит следующего. В принципе для решения задачи нам большего не нужно.
Возьмём самого медленного и самого быстрого гнома, итого они перейдут на другую сторону за 4 минуты. После чего быстрый должен будет вернуть фонарь назад потратив ещё 1 минуту.
Итого: мы перевели 1 гнома и потратили 5 минут.
Далее переводим ещё одного самого медленного гнома с самым быстрым, тратя ещё 5 минут.
И опять самого медленного с самым быстрым, ещё 5 минут.
Дальше уже идут довольно быстрые гномы переход на ту сторону займёт 2 минуты, а обратно 1 минуту.
Итого ещё +3 минуты.
Последний переход займёт 2 минуты так как нам не прийдется нести фонарик обратно.
#include <iostream>
using namespace std;
double y(double a, double b, double c, double x) {
if (c == x && b + c + x != 0)
return ((a + b) * (a + c) * (a + x)) / (b + c + x);
if (c != x && 1 + b != 0 && 1 + a != 0 && a / (1 + b) + b / (1 + a) >= 0)
return sqrt(a / (1 + b) + b / (1 + a));
return -1e9 - 7;
}
signed main() {
double a, b, c, x, ans;
cin >> a >> b >> c >> x;
ans = y(a, b, c, x);
ans == -1e9 - 7 ? cout << "No solution" : cout << ans;
}
Возьмём самого медленного и самого быстрого гнома, итого они перейдут на другую сторону за 4 минуты. После чего быстрый должен будет вернуть фонарь назад потратив ещё 1 минуту.
Итого: мы перевели 1 гнома и потратили 5 минут.
Далее переводим ещё одного самого медленного гнома с самым быстрым, тратя ещё 5 минут.
И опять самого медленного с самым быстрым, ещё 5 минут.
Дальше уже идут довольно быстрые гномы переход на ту сторону займёт 2 минуты, а обратно 1 минуту.
Итого ещё +3 минуты.
Последний переход займёт 2 минуты так как нам не прийдется нести фонарик обратно.
Всего: 20 минут