けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 285 A - Edge Checker 2 (7Q, 灰色, 100 点)

規則性を発見しよう! この規則は今後セグメントツリーなどを学ぶときにも活用する!

問題概要

次の図において、 a 番目の頂点と  b 番目の頂点がつながっているかを判定せよ。

考えたこと

図を見ると、次の規則があることがわかる。

  • 番号が  v である頂点と左に繋がっている頂点の番号は  2v
  • 番号が  v である頂点と右に繋がっている頂点の番号は  2v + 1

これをもとに判定しよう。

 a \lt b であることから、もし繋がっているならば、頂点  b は頂点  a の左側につながっているか、右側につながっているかのいずれかである。

よって、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;
}