結果
問題 | No.2165 Let's Play Nim! |
ユーザー |
![]() |
提出日時 | 2023-04-16 10:27:33 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,453 bytes |
コンパイル時間 | 216 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 297,196 KB |
平均クエリ数 | 403.49 |
最終ジャッジ日時 | 2024-10-11 21:09:18 |
合計ジャッジ時間 | 12,005 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 17 TLE * 1 -- * 20 |
ソースコード
def rec(): ret = int(input()) if ret == -1: exit() def inp(): global g i, k = map(int, input().split()) i -= 1 g ^= A[i] remX(A[i], i) A[i] -= k if A[i] == 0: remain.remove(i) setX(A[i], i) g ^= A[i] def remX(x, i): j = 0 while x > 0: if x & 1: X[j].remove(i) x >>= 1 j += 1 def setX(x, i): j = 0 while x > 0: if x & 1: X[j].add(i) x >>= 1 j += 1 def find(x): j = 0 tmp = set(range(n)) while x > 0: if x & 1: tmp &= X[j] j += 1 x >>= 1 if tmp: return next(iter(tmp)) else: return -1 X = [set() for _ in range(14)] n = int(input()) A = list(map(int, input().split())) remain = set(range(n)) g = 0 for i, a in enumerate(A): g ^= a setX(a, i) if g == 0: print(0) else: print(1) while 1: #print(A,g) if g != 0: i = find(g) if i == -1: for j in remain: gt = A[j] ^ g if gt < A[j]: i = j break remX(A[i], i) to = A[i] ^ g subt = A[i] - to A[i] = to if A[i] == 0: remain.remove(i) setX(to, i) g = 0 print(i + 1, subt) rec() #if sum(A) == 0: # print("finish") # exit() #print(A,g) inp() rec()