見出し画像

ABC199 A 解答

A - Square Inequality (5)

問題文

整数 A, B, Cが与えられます。
A^2 + B^2 < C^2かを判定してください。

制約

0 ≤ A ≤ 1000
0 ≤ B ≤ 1000
0 ≤ C ≤ 1000
A, B, C は整数である

考察

数式を判定する問題です。ということで、数式を判定してあげましょう。

いきなり結論ですが

if(A*A + B*B < C*C)

で判定をすればACです。

ただ、これだけだと面白くないので少し制約を見ましょう。

どうやら各数字は1000以下らしいです。ですので、それを2乗しても10^6程度です。左辺はそれらの足し算ですが、それでも、2*10^6に収まってくれます。

C++のint型は32bitですので、だいたい 2*10^9までの数字を扱うことが可能です。ということで、この問題ではint型を用いればオーバーフローを気にすることなく答えを求めることができますね。

実装

 #include <bits/stdc++.h> #define  rep(i,n) for(int i=0;i<n;++i) #define  reps(i,s,n) for(int i=s;i<n;++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;

int main()
{
   int a,b,c;
   cin >> a >> b >> c;
   if(a*a+b*b<c*c) cout << "Yes" << endl;
   else cout << "No" << endl;

   return 0;
}

あとがき

本問題は整数しか出現しないので、与えられた通りに実装をすればACがもらえます。優しいですね。

ただ、優しくない問題もありまして、logやルートで小数点誤差を発生させてくるやつもいます。そういう時は頑張って整数型で扱えるようにしましょう。

いくつか紹介しておきます。

典型90問 020問目 - Log Inequality(★3)

https://atcoder.jp/contests/typical90/tasks/typical90_t

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

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


この記事が気に入ったらサポートをしてみませんか?