[AtCoder] パナソニックプログラミングコンテスト2020 C – Sqrt Inequality

2020年12月15日

問題

方針

実際に平方根の計算をすると誤差が怖いので、整数で比較する方法を考えます。

\[\begin{eqnarray}
\sqrt{a} + \sqrt{b} &<& \sqrt{c}\\
a + \sqrt{2ab} + b&<& c\\
\sqrt{2ab}&<& c – a – b\\
\end{eqnarray}\]

ここで、\( c – a – b < 0\) ならば上記の不等式は正しくありません。よって、\( c – a – b \geq 0\) のとき、上式は、

\[4ab < (c – a -b )^2\]

となるので、この値を比較すれば良いです。

コード

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

typedef long long ll;
int main() {
    ll a, b, c;
    cin >> a >> b >> c;
    ll l = 4 * a * b;
    ll r = c - a - b;
    if (r < 0) {
        cout << "No\n";
        return 0;
    }
    r *= r;
    if (l < r) cout << "Yes\n";
    else cout << "No\n";
    return 0;
}