Playoff-Codeforces
投稿日: 更新日:
問題
人のトーナメントを考えます。各選手にはからの番号がついています。
ペアは以下のようにして決まります。
- 最初のステージではと, と... のペアが戦います。
- 次のステージではの勝者との勝者、との勝者が戦います。
- その次のステージでも同様のルールで戦って行きます。
勝敗は以下ように決まります。
- が奇数ならば小さい番号の人が勝利
- が偶数ならば大きい番号の人が勝利
誰がこのトーナメントで優勝するか出力してください。
解法
最初のステージを考えます。戦うペアはとで示される組み合わせとなります。合計は奇数となるので番号の小さい奇数プレイヤーが次へ進みます。
この結果より、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;
}