首先,不难发现,最好的情况就是等边三角形,当且仅当 $ max(a, b) / min(a, b) <= 2 sqrt(3) / 3 $ 时成立,此时为 $ 2 sqrt(3) / 3 * min(a, b) $ 。

若不满足,则算 $ sqrt(max(a, b) ^ 2 + min(a, b) ^ 2 + sqrt(3) max(a, b) min(a, b)) $ 即可。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    double a, b;
    cin >> a >> b;
    if (a > b)
    {
        swap(a, b);
    }
    if (b / a >= 2 * sqrt(3) / 3)
    {
        printf("%.20lf", 2 * sqrt(3) / 3 * a);
    }
    else
    {
        printf("%.20lf", 2 * sqrt(a * a + b * b - sqrt(3) * a * b));
    }
    return 0;
}

作者 yuanhj34

发表回复