問題
https://codeforces.com/contest/1341/problem/A
問題概要
n個の袋があり、袋一つの重さはa-b
からa+b
の間であり袋n個全体の重さはc-d
からc+d
の間であるという。
n, a, b, c ,d
が与えられるので、上記の条件を満たしているかどうかを答えよ。
考察
(a-b) * n
から(a+b) * n
の区間がc-d
からc+d
の区間に重なっていれば満たすし、重なっていれば満たしません。
これを言い直すと、(a-b) * n
がc+d
より大きいか(a+b) * n
がc-d
より小さい場合満たさない、となります。なので、それを実装すればよいです。
#include <bits/stdc++.h> using namespace std; int main() { int t; cin >> t; while (t--) { int n, a, b, c, d; cin >> n >> a >> b >> c >> d; cout << (n * (a - b) > c + d or n * (a + b) < c - d ? "No" : "Yes") << endl; } }
反省
上記のコードはこの記事を書く時に改めて書き直したもので、実戦では慌ててもうちょっと複雑で不必要な場合分けをしてしまいました。
こういう条件はノータイムで出てくるようにならないと・・・。