結果

問題 No.2893 Minahoshi (Hard)
ユーザー 👑 rin204rin204
提出日時 2024-09-13 22:51:52
言語 C++23
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,786 bytes
コンパイル時間 775 ms
コンパイル使用メモリ 81,384 KB
実行使用メモリ 11,428 KB
最終ジャッジ日時 2024-09-13 22:51:57
合計ジャッジ時間 4,682 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 3 ms
7,628 KB
testcase_01 AC 9 ms
6,948 KB
testcase_02 AC 10 ms
9,216 KB
testcase_03 AC 9 ms
8,780 KB
testcase_04 AC 8 ms
9,164 KB
testcase_05 AC 10 ms
10,308 KB
testcase_06 AC 8 ms
7,628 KB
testcase_07 AC 6 ms
6,944 KB
testcase_08 AC 6 ms
6,940 KB
testcase_09 AC 14 ms
10,388 KB
testcase_10 AC 9 ms
9,188 KB
testcase_11 AC 9 ms
9,680 KB
testcase_12 AC 10 ms
8,944 KB
testcase_13 WA -
testcase_14 AC 7 ms
6,944 KB
testcase_15 AC 4 ms
6,940 KB
testcase_16 AC 9 ms
9,092 KB
testcase_17 AC 8 ms
8,944 KB
testcase_18 WA -
testcase_19 AC 9 ms
7,496 KB
testcase_20 AC 6 ms
8,408 KB
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 AC 6 ms
6,944 KB
testcase_25 AC 4 ms
6,944 KB
testcase_26 AC 3 ms
6,944 KB
testcase_27 AC 7 ms
8,300 KB
testcase_28 AC 9 ms
7,500 KB
testcase_29 AC 11 ms
9,004 KB
testcase_30 AC 13 ms
10,504 KB
testcase_31 AC 7 ms
9,152 KB
testcase_32 AC 8 ms
7,504 KB
testcase_33 AC 12 ms
10,444 KB
testcase_34 AC 13 ms
11,228 KB
testcase_35 AC 7 ms
9,440 KB
testcase_36 AC 8 ms
9,568 KB
testcase_37 AC 14 ms
9,548 KB
testcase_38 AC 7 ms
7,504 KB
testcase_39 AC 8 ms
9,156 KB
testcase_40 AC 8 ms
9,784 KB
testcase_41 AC 7 ms
8,976 KB
testcase_42 AC 12 ms
10,364 KB
testcase_43 AC 12 ms
10,352 KB
testcase_44 AC 12 ms
10,468 KB
testcase_45 AC 12 ms
11,428 KB
testcase_46 AC 12 ms
10,372 KB
testcase_47 AC 13 ms
11,396 KB
testcase_48 AC 8 ms
7,628 KB
testcase_49 AC 7 ms
7,628 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

// https://qoj.ac/submission/74195

#include <cstdio>
#include <iostream>
using namespace std;

const int o = 1e6;
int n, K, pth[o], cnt, nxt[o];
bool vis[o];
int solve() {
    auto dfs = [&](auto &&self, int nw) -> void {
        if (vis[nw]) return;
        vis[nw] = 1;
        self(self, nw * 2 % (1 << K));
        self(self, (nw * 2 + 1) % (1 << K));
        pth[++cnt] = nw;
    };

    scanf("%d", &n);
    for (int i = 0; i <= n; i++) {
        pth[i] = 0;
        vis[i] = 0;
        nxt[i] = 0;
    }
    cnt = 0;

    if (n == 1) {
        putchar(97);
        return 0;
    }
    for (; (1 << K) + K - 1 <= n; ++K);
    --K;
    dfs(dfs, 0);
    for (int i = 1, j = cnt; i < j; swap(pth[i++], pth[j--]));
    if (n == (1 << K) + K - 1) {
        for (int i = 1; i < K; ++i) putchar(97);
        for (int i = 1; i <= cnt; ++i) putchar(97 + pth[i] % 2);
        return 0;
    }
    for (int i = 0; i < (1 << (K + 1)); ++i) vis[i] = 0, nxt[i] = -1;
    for (int i = 1; i <= cnt; ++i) vis[pth[i] = (pth[i] << 1) | (pth[i + 1] & 1)] = 1;
    for (int i = 1; i <= cnt; ++i) nxt[pth[i]] = pth[i % cnt + 1];
    for (int i = 0; i < (1 << (K + 1)); ++i)
        if (nxt[i] < 0) nxt[i] = nxt[i ^ (1 << K)] ^ 1;
    for (int i = 0, t; i < (1 << (K + 1)); ++i)
        if (!vis[i]) {
            for (t = i; !vis[t]; t = nxt[t]) vis[t] = 1, ++cnt;
            swap(nxt[i], nxt[i ^ (1 << K)]);
            if (cnt + K >= n) {
                for (int j = K; j + 1; --j) putchar(97 + ((nxt[i] >> j) & 1));
                for (int j = K + 2, t = nxt[nxt[i]]; j <= n; ++j, t = nxt[t]) putchar(97 + (t & 1));
                break;
            }
        }
    return 0;
}
int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
        cout << endl;
    }
    return 0;
}
0