結果
| 問題 | No.3317 ワロングアンサーロングアンサーンスワロンガー |
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-02-14 17:53:36 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 463 ms / 2,000 ms |
| コード長 | 1,792 bytes |
| 記録 | |
| コンパイル時間 | 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 |
ソースコード
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))
detteiuu