結果

問題 No.2278 Time Bomb Game 2
ユーザー lam6er
提出日時 2025-04-16 00:24:54
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,040 bytes
コンパイル時間 414 ms
コンパイル使用メモリ 81,852 KB
実行使用メモリ 72,528 KB
最終ジャッジ日時 2025-04-16 00:26:49
合計ジャッジ時間 6,452 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 39 WA * 31
権限があれば一括ダウンロードができます

ソースコード

diff #

n, k, t = map(int, input().split())
c = input().strip()

# Precompute for each position the nearest B to the left and right (for Alice)
left_B = [-1] * (n + 2)  # 1-based
right_B = [-1] * (n + 2)
left_A = [-1] * (n + 2)
right_A = [-1] * (n + 2)

last = -1
for i in range(1, n+1):
    if c[i-1] == 'B':
        last = i
    left_B[i] = last

last = -1
for i in range(n, 0, -1):
    if c[i-1] == 'B':
        last = i
    right_B[i] = last

last = -1
for i in range(1, n+1):
    if c[i-1] == 'A':
        last = i
    left_A[i] = last

last = -1
for i in range(n, 0, -1):
    if c[i-1] == 'A':
        last = i
    right_A[i] = last

current_pos = k
remaining = t

while True:
    current_char = c[current_pos - 1]
    if remaining == 0:
        print('Alice' if current_char == 'B' else 'Bob')
        break
    if current_char == 'A':
        lb = left_B[current_pos]
        rb = right_B[current_pos]
        dl = current_pos - lb if lb != -1 else float('inf')
        dr = rb - current_pos if rb != -1 else float('inf')
        min_d = min(dl, dr)
        if min_d == float('inf'):
            print('Bob')
            break
        if min_d > remaining:
            print('Bob')
            break
        if dl <= dr:
            current_pos = lb
        else:
            current_pos = rb
        remaining -= min_d
        if remaining % 2 == 0:
            print('Alice')
        else:
            print('Bob')
        break
    else:
        la = left_A[current_pos]
        ra = right_A[current_pos]
        dl = current_pos - la if la != -1 else float('inf')
        dr = ra - current_pos if ra != -1 else float('inf')
        min_d = min(dl, dr)
        if min_d == float('inf'):
            print('Alice')
            break
        if min_d > remaining:
            print('Alice')
            break
        if dl <= dr:
            current_pos = la
        else:
            current_pos = ra
        remaining -= min_d
        if remaining % 2 == 0:
            print('Alice')
        else:
            print('Bob')
        break
0