Playoff-Codeforces

投稿日: 更新日:

問題リンク-Playoff

問題

2n2^n人のトーナメントを考えます。各選手には11から2n2^nの番号がついています。
ペアは以下のようにして決まります。

  • 最初のステージでは1122, 3344... のペアが戦います。
  • 次のステージでは121-2の勝者と343-4の勝者、565-6787-8の勝者が戦います。
  • その次のステージでも同様のルールで戦って行きます。

勝敗は以下ように決まります。

  • x+yx+yが奇数ならば小さい番号の人が勝利
  • x+yx+yが偶数ならば大きい番号の人が勝利

誰がこのトーナメントで優勝するか出力してください。

解法

最初のステージを考えます。戦うペアは2x12x-12x2xで示される組み合わせとなります。合計は奇数となるので番号の小さい奇数プレイヤーが次へ進みます。
この結果より、2ステージ移行は番号が奇数同士の対戦となるので和は常に偶数となり、番号の大きい人が勝利します。よって、奇数の最大値がこのトーナメントの優勝者となります。

実装

#include <bits/stdc++.h>
using namespace std;

void solve(){
    int n;
    cin >> n;
    long long pow2 = 1;
    for(int i = 0;i < n; ++i){
        pow2 *= 2;
    }
    cout << (pow2 - 1) << endl;
}

int main(){
    int t;
    cin >> t;
    while(t--){
        solve();
    }
    return 0;
}

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人