給定一個 的矩形,求能放在矩形中最大的正三角形。
首先我們先假定 。我們假設答案三角形有至少一個頂點和長方形某個頂點重合。因為對於任意一個正三角形,每個角都是 ,必然存在一個頂點使得它是最左上/左下/右上/右下角,可以把這個角對齊到長方形的某一個頂點上。除了這個點,至少還有一個點在長方形的邊上(除了那個和長方形端點對齊的點),否則答案可以更優。

如圖, 是我們要求的答案三角形。 是和長方形對齊的角, 是在 上運動的點。 也是正三角形,可以證得 和 全等, 又是頂點,,所以 在如圖的綠色直線上移動。 必須在長方形內,所以當 處在 上或 上時答案最優。
具體來說,當 時, 在 上,答案為 ,否則, 在 上,答案為
#define _USE_MATH_DEFINES
#include <cmath>
#include <iomanip>
#include <iostream>
int main()
{
double a, b;
std::cin >> a >> b;
if (a > b) std::swap(a, b);
std::cout << std::fixed << std::setprecision(15);
auto maxl = a / std::cos(M_PI / 6);
if (maxl < b) {
std::cout << maxl << std::endl;
return 0;
}
auto h = (maxl - b) * std::tan(M_PI / 3);
std::cout << std::sqrt(b * b + h * h) << std::endl;
}
注意:使用 <cmath> 中的數學常數需要 _USE_MATH_DEFINES 宏。
推薦看看小日本的題解:F - Regular Triangle Inside a Rectangle 解説