配点: 100 点 / 実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 11
問題概要
整数列 が与えられる。
の要素を自由に並べ替えた列を
とするとき、
を満たすようにできるか判定せよ。
制約
考察
としてあり得るパターンは6通りあるが、
の値は
と
を入れ替えても変わらない(乗法の交換法則)ので、考えるのは実質3通りで良い。
したがって、以下の3つのうちいずれか1つでも成り立てば答えはYes
、そうでなければNo
と判定できる。
ちなみに、 の要素は全て正なので、
を昇順ソートすれば、一番上のパターンだけを判定するので十分。
実装例
#include <bits/stdc++.h> using namespace std; // ======================================== // int main() { int A1, A2, A3; cin >> A1 >> A2 >> A3; if (A1 * A2 == A3 || A1 * A3 == A2 || A2 * A3 == A1) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; }
実装時間: 5分以内
コメント
場合分けはできるだけ減らすのが鉄則。