規則性を発見しよう! この規則は今後セグメントツリーなどを学ぶときにも活用する!
問題概要
次の図において、 番目の頂点と 番目の頂点がつながっているかを判定せよ。
考えたこと
図を見ると、次の規則があることがわかる。
- 番号が である頂点と左に繋がっている頂点の番号は
- 番号が である頂点と右に繋がっている頂点の番号は
これをもとに判定しよう。
であることから、もし繋がっているならば、頂点 は頂点 の左側につながっているか、右側につながっているかのいずれかである。
よって、b == a * 2
または b == a * 2 + 1
であるかどうかを判定すればよい。
コード
#include <bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; if (b == a * 2 || b == a * 2 + 1) cout << "Yes" << endl; else cout << "No" << endl; }