はまやんはまやんはまやん

hamayanhamayan's blog

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

https://atcoder.jp/contests/panasonic2020/tasks/panasonic2020_c

解説

https://atcoder.jp/contests/panasonic2020/submissions/10895357

sqrt(a) + sqrt(b) < sqrt(c)を普通に比較することでも通すことができる。
B問題でWAをもらってこの解法に警戒したが、念のためlong doubleにしてEPSをつけて祈ったら通った。
その場合は、以下のことを行う。

  • long doubleを使う
  • EPSを適切に設定して比較に使う(誤差対策でA < BはA < B - EPSとするテンプレがある)

より安全な解法として、全部整数にして比較する解法がある。
こちらの解説は、公式解説に任せることにする。
(そんなに難しくない。高校1年くらいの数学知識があれば大丈夫)

using ld = long double;
ld a, b, c;
const ld EPS = 1e-14;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> a >> b >> c;

    if (sqrtl(a) + sqrtl(b) < sqrtl(c) - EPS) cout << "Yes" << endl;
    else cout << "No" << endl;
}