結果

問題 No.3317 ワロングアンサーロングアンサーンスワロンガー
コンテスト
ユーザー detteiuu
提出日時 2026-02-14 17:53:36
言語 PyPy3
(7.3.17)
結果
AC  
実行時間 463 ms / 2,000 ms
コード長 1,792 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 425 ms
コンパイル使用メモリ 82,544 KB
実行使用メモリ 100,188 KB
最終ジャッジ日時 2026-02-14 17:53:58
合計ジャッジ時間 21,576 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 63
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

N, Q = map(int, input().split())
S = input()
TX = [list(map(int, input().split())) for _ in range(Q)]

INF = 1<<60

cum = [0]
for s in S:
    if s in ["w", "a"]:
        cum.append(cum[-1]+1)
    else:
        cum.append(cum[-1])

def func(t, idx):
    if 1 <= cum[idx] and INF//cum[idx] < cnt:
        return INF, -1
    ans = idx+cum[idx]*cnt
    if S[idx] in ["w, a"]:
        return ans, ans+cnt
    else:
        return ans, -1

ans = []
for T, X in TX:
    X -= 1
    T = min(T, 60)
    cnt = (1<<T)*5-5
    left = 0
    right = N
    while left+1 < right:
        mid = (left+right)//2
        a, b = func(T, mid)
        if a == INF:
            right = mid
        elif b == -1:
            if a <= X:
                left = mid
            else:
                right = mid
        else:
            if b <= X:
                left = mid
            else:
                right = mid
    idx = left

    if S[idx] not in ["w", "a"]:
        ans.append(S[idx])
        continue

    a, b = func(T, left)
    cnt = X-a
    flag = S[idx] == "a"
    for i in reversed(range(T)):
        if not flag:
            a = (1<<i)*5-4
            if a*2 <= cnt:
                ans.append("rong"[cnt-a*2])
                break
            if cnt < a:
                flag = False
            else:
                flag = True
                cnt -= a
        else:
            a = (1<<i)*5-4
            if a <= cnt < a+2:
                ans.append("ns"[cnt-a])
                break
            elif a*2+2 <= cnt < a*2+4:
                ans.append("er"[cnt-(a*2+2)])
                break
            if cnt < a:
                flag = True
            else:
                flag = False
                cnt -= a+2
    else:
        ans.append("w" if not flag else "a")

print("".join(ans))
0