結果

問題 No.3258 Xor Division Game
ユーザー lif4635
提出日時 2025-09-05 19:52:56
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,039 ms / 2,000 ms
コード長 748 bytes
コンパイル時間 316 ms
コンパイル使用メモリ 82,516 KB
実行使用メモリ 151,372 KB
最終ジャッジ日時 2025-09-05 21:18:29
合計ジャッジ時間 29,589 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 67
権限があれば一括ダウンロードができます

ソースコード

diff #

# stack、Dict
import sys
from collections import defaultdict 
from bisect import bisect_left
sys.setrecursionlimit(10 ** 6)

n = int(input())
f = list(map(int, input().split()))

c = defaultdict(list)
for i, x in enumerate(f):
    c[x].append(i)
    
def cnt(x, l, r):
    return bisect_left(c[x], r) - bisect_left(c[x], l)

ans = 0
st = [(0, n)]
while st:
    l, r = st.pop()
    d = r - l
    nl = l
    nr = r - 1
    m = -1
    while nl <= nr:
        if cnt(f[nl], l, r) == 1:
            m = nl
            break
        if cnt(f[nr], l, r) == 1:
            m = nr
            break
        nl += 1
        nr -= 1
    
    if m != -1:
        ans ^= 1
        st.append((l, m))
        st.append((m+1, r))

print("Alice" if ans else "Bob")
0