結果
問題 |
No.3258 Xor Division Game
|
ユーザー |
|
提出日時 | 2025-09-05 18:23:46 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,346 bytes |
コンパイル時間 | 222 ms |
コンパイル使用メモリ | 82,180 KB |
実行使用メモリ | 229,024 KB |
最終ジャッジ日時 | 2025-09-05 21:16:39 |
合計ジャッジ時間 | 36,211 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 WA * 1 |
other | AC * 55 WA * 12 |
ソースコード
from collections import defaultdict n = int(input()) f = list(map(int, input().split())) def division(only, cnt, l, r, idx): """ [l, r) 区間を取り出す """ ncnt = defaultdict(set) for i in range(l, r): cnt[f[i]].discard(i) only.discard(i) ncnt[f[i]].add(i) nonly = set() ch = list(ncnt.keys()) ch.append(f[idx]) for v in ch: if len(ncnt[v]) == 1: nonly.add(ncnt[v].pop()) del ncnt[v] if len(cnt[v]) == 1: only.add(cnt[v].pop()) del cnt[v] return nonly, ncnt only = set() cnt = defaultdict(set) for i in range(n): cnt[f[i]].add(i) ch = list(cnt.keys()) for v in ch: if len(cnt[v]) == 1: only.add(cnt[v].pop()) del cnt[v] last = n st = [(only, cnt, 0, n)] while st: only, cnt, l, r = st.pop() if len(only) == 0: continue idx = only.pop() cnt[f[idx]].discard(idx) last -= 1 nl = idx - l nr = r - idx - 1 if nl < nr: nonly, ncnt = division(only, cnt, l, idx, idx) st.append((nonly, ncnt, l, idx)) st.append((only, cnt, idx+1, r)) else: nonly, ncnt = division(only, cnt, idx+1, r, idx) st.append((only, cnt, l, idx)) st.append((nonly, ncnt, idx+1, r)) print("Alice" if last & 1 else "Bob")