Фото на сайт#7342

Фото на сайт (Розбір)

Ідея

Для отримання максимального розміру фотографії її потрібно масштабувати до межі рамки за меншою зі сторін, зберігаючи пропорційність. Оскільки за умовою задачі є дві рамки розміром m \times n і n \times m, необхідно перевірити обидва випадки та обрати найбільший.

Реалізація

Збільшимо фотографію на всю ширину та на всю довжину першої рамки, записавши відповідні коефіцієнти масштабування:

double k1 = (double)m / a;
double k2 = (double)n / b;

З отриманих коефіцієнтів оберемо найменший, щоби не вилізти за межі рамки з іншої сторони:

double kmin1 = min(k1, k2);

Повторимо для рамки іншого розміру й оберемо найбільший з коефіцієнтів:

k1 = (double)n / a;
k2 = (double)m / b;
double kmin2 = min(k1, k2);

double kmax = max(kmin1, kmin2);

І тепер збільшимо розміри фотографії на цей коефіцієнт, вказавши необхідну точність після крапки, що і буде відповіддю:

cout << fixed << setprecision(3) << (a * kmax) << " " << (b * kmax) << endl;