![見出し画像](https://assets.st-note.com/production/uploads/images/50814166/rectangle_large_type_2_2eee9ca0504aec62cca7eb7c4e1b3a10.png?width=1200)
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
この記事が気に入ったらサポートをしてみませんか?