結果
| 問題 |
No.2278 Time Bomb Game 2
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 19:52:24 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,331 bytes |
| コンパイル時間 | 185 ms |
| コンパイル使用メモリ | 82,708 KB |
| 実行使用メモリ | 70,912 KB |
| 最終ジャッジ日時 | 2025-06-12 19:53:01 |
| 合計ジャッジ時間 | 6,787 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 67 WA * 3 |
ソースコード
n, k, t = map(int, input().split())
c = input().strip()
k -= 1 # convert to 0-based index
# Precompute nearest B to the left and right for each position
left_B = [-1] * n
last_B = -1
for i in range(n):
if c[i] == 'B':
last_B = i
left_B[i] = last_B
right_B = [-1] * n
last_B = -1
for i in range(n-1, -1, -1):
if c[i] == 'B':
last_B = i
right_B[i] = last_B
# Precompute nearest A to the left and right for each position
left_A = [-1] * n
last_A = -1
for i in range(n):
if c[i] == 'A':
last_A = i
left_A[i] = last_A
right_A = [-1] * n
last_A = -1
for i in range(n-1, -1, -1):
if c[i] == 'A':
last_A = i
right_A[i] = last_A
current_pos = k
remaining_steps = t
visited = {}
while remaining_steps > 0:
current_char = c[current_pos]
state = (current_pos, current_char)
if state in visited:
prev_remaining = visited[state]
cycle_length = prev_remaining - remaining_steps
if cycle_length <= 0:
break # no progress, avoid infinite loop
num_cycles = remaining_steps // cycle_length
remaining_steps -= num_cycles * cycle_length
visited = {} # reset to avoid reprocessing the same cycle
continue
visited[state] = remaining_steps
if current_char == 'A':
left_b = left_B[current_pos]
right_b = right_B[current_pos]
if left_b == -1 and right_b == -1:
# All A's, Alice can't reach B, final cell is A
print("Bob")
exit()
if left_b == -1:
direction = 1
distance = right_b - current_pos
elif right_b == -1:
direction = -1
distance = current_pos - left_b
else:
left_dist = current_pos - left_b
right_dist = right_b - current_pos
if left_dist < right_dist:
direction = -1
distance = left_dist
elif right_dist < left_dist:
direction = 1
distance = right_dist
else:
# equidistant, choose left
direction = -1
distance = left_dist
else:
left_a = left_A[current_pos]
right_a = right_A[current_pos]
if left_a == -1 and right_a == -1:
# All B's, Bob can't reach A, final cell is B
print("Alice")
exit()
if left_a == -1:
direction = 1
distance = right_a - current_pos
elif right_a == -1:
direction = -1
distance = current_pos - left_a
else:
left_dist = current_pos - left_a
right_dist = right_a - current_pos
if left_dist < right_dist:
direction = -1
distance = left_dist
elif right_dist < left_dist:
direction = 1
distance = right_dist
else:
# equidistant, choose left
direction = -1
distance = left_dist
if distance <= remaining_steps:
remaining_steps -= distance
current_pos += direction * distance
else:
current_pos += direction * remaining_steps
remaining_steps = 0
final_char = c[current_pos]
print("Alice" if final_char == 'B' else "Bob")
gew1fw