結果

問題 No.2868 Another String of yuusaan
ユーザー lam6er
提出日時 2025-03-31 17:58:56
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 2,397 bytes
コンパイル時間 151 ms
コンパイル使用メモリ 82,596 KB
実行使用メモリ 53,100 KB
最終ジャッジ日時 2025-03-31 17:59:37
合計ジャッジ時間 3,827 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other TLE * 1 -- * 17
権限があれば一括ダウンロードができます

ソースコード

diff #

def main():
    import sys
    N, K = map(int, sys.stdin.readline().split())

    def compute_rem_max(K):
        if K == 0:
            return 0
        target = (K + 1) // 2
        if target == 0:
            return 0
        low = 0
        high = 60  # since 4^60 is way larger than any K up to 1e15
        while low < high:
            mid = (low + high) // 2
            if (1 << (2 * mid)) < target:  # 4^mid = 2^(2*mid)
                low = mid + 1
            else:
                high = mid
        return low

    rem_max = compute_rem_max(K)
    level1 = ['y', 'u', 'u', 's', 'a', 'a', 'n']
    current_sum = 0
    found_char = None
    current_rem = 0
    k_remaining = 0

    for idx, c in enumerate(level1):
        if c in {'u', 'a'}:
            rem_initial = N - 1
            if rem_initial < 0:
                size = 1
            else:
                if rem_initial < rem_max:
                    size = 2 * (4 ** rem_initial) - 1
                    if size > K:
                        size = K + 1
                else:
                    size = K + 1
        else:
            size = 1
        if current_sum + size >= K:
            found_char = c
            k_remaining = K - current_sum
            current_rem = N - 1 if c in {'u', 'a'} else 0
            break
        current_sum += size

    current_char = found_char
    current_rem_steps = current_rem

    while True:
        if current_rem_steps == 0 or current_char not in {'u', 'a'}:
            print(current_char)
            return

        substitution = ['y', 'u', 'u', 's', 'a', 'a', 'n']
        for c_sub in substitution:
            if c_sub in {'u', 'a'}:
                rem_sub = current_rem_steps - 1
                if rem_sub < 0:
                    size_sub = 1
                else:
                    if rem_sub < rem_max:
                        size_sub = 2 * (4 ** rem_sub) - 1
                        if size_sub > k_remaining:
                            size_sub = k_remaining + 1
                    else:
                        size_sub = k_remaining + 1
            else:
                size_sub = 1

            if k_remaining <= size_sub:
                current_char = c_sub
                current_rem_steps = rem_sub if c_sub in {'u', 'a'} else 0
                break
            else:
                k_remaining -= size_sub

if __name__ == "__main__":
    main()
0