結果
| 問題 | No.3120 Lower Nim |
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2025-04-19 16:38:58 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 353 ms / 2,000 ms |
| コード長 | 1,350 bytes |
| 記録 | |
| コンパイル時間 | 541 ms |
| コンパイル使用メモリ | 82,728 KB |
| 実行使用メモリ | 94,876 KB |
| 平均クエリ数 | 2685.91 |
| 最終ジャッジ日時 | 2025-04-19 16:39:12 |
| 合計ジャッジ時間 | 12,999 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 43 |
ソースコード
"""
https://yukicoder.me/problems/no/3120
Aの総和が奇数なら先手勝ち
総和が奇数の状態で相手に渡すと負け
Aの各要素を 2で割った商の総和が奇数なら、2を引いて渡せばok
相手は1を引いて返すことはできないので、2を引くことになる。
それもだめなら、4で割った商の総和を見ればいい?
"""
import sys
N = int(input())
A = list(map(int,input().split()))
ok = None
for i in range(15):
s = 0
bit = 2**i
for a in A:
s += a // bit
if s % 2 == 1:
ok = i
break
if ok != None:
print ("First", flush=True)
K = 2**ok
else:
print ("Second", flush=True)
i,x = map(int,input().split())
i -= 1
A[i] -= x
K = x
status = int(input())
assert status == 0
# Kのbit
while True:
bit = None
for i in range(15):
if 2**i & K:
bit = 2**i
break
for i in range(N):
if bit <= A[i]:
print (i+1,bit,flush=True)
A[i] -= bit
K = bit
status = int(input())
if status == 1:
sys.exit()
assert status != -1
break
i,x = map(int,input().split())
i -= 1
A[i] -= x
K = x
status = int(input())
assert status == 0
SPD_9X2