結果
| 問題 | No.566 だいたい完全二分木 | 
| コンテスト | |
| ユーザー |  teketeke5000 | 
| 提出日時 | 2017-10-19 13:46:12 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 2 ms / 2,000 ms | 
| コード長 | 816 bytes | 
| コンパイル時間 | 1,522 ms | 
| コンパイル使用メモリ | 161,872 KB | 
| 実行使用メモリ | 6,820 KB | 
| 最終ジャッジ日時 | 2024-11-21 07:34:30 | 
| 合計ジャッジ時間 | 2,394 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 11 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define REP(i,a,n) for(ll i=(a); i<(ll)(n); i++)
#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)
#define ALLOF(v) (v).begin(), (v).end()
int main(void) {
    int K,root,tmp,node=0,range,add;
    vector<int> ans;
    cin >> K;
    range = pow(2, K);
    node = range/2;
    add = range;
    tmp = node;
    while(true) {
        ans.push_back(node);
        if (node == range - 1) break;
        if (node + add >= range) {
            tmp /= 2;
            add /= 2;
            node = tmp;
        }
        else node += add;
    }
    for (int i=0; i<ans.size(); i++) {
        ans[i]--;
        if (ans[i] == 0) cout << range-1 << " ";
        else cout << ans[i] << " ";
    }
    cout << endl;
    return 0;
}
            
            
            
        