結果

問題 No.3120 Lower Nim
ユーザー tassei903
提出日時 2025-04-18 22:22:23
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 2,127 bytes
コンパイル時間 522 ms
コンパイル使用メモリ 82,320 KB
実行使用メモリ 74,116 KB
平均クエリ数 0.68
最終ジャッジ日時 2025-04-18 22:22:28
合計ジャッジ時間 4,546 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 1
other AC * 5 TLE * 1 -- * 37
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = lambda :sys.stdin.readline()[:-1]
ni = lambda :int(input())
na = lambda :list(map(int,input().split()))
yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES")
no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO")
#######################################################################
from functools import lru_cache

@lru_cache(maxsize=None)
def naive2(n, a, k):
    if a == (0, ) * n:
        return 0
    res = 1
    for i in range(n):
        for x in range(1, min(a[i], k) + 1):
            res &= naive2(n, a[:i] + (a[i] - x, ) + a[i+1:], x)
    return 1 ^ res

def naive(n, a):
    return naive2(n, a, 5)

def solve(n, a):
    s = 0
    for i in range(n):
        s ^= a[i]
    return s != 0

# for i in range(1, 10):
#     for j in range(1, 10):
#         if 0 == naive(2, (i, j)):
#             print(i, j)

# for i in range(1, 10):
#     for j in range(i, 10):
#         for k in range(j, 10):
#             assert naive(3, (i, j, k)) == solve(3, (i, j, k))
# from random import randint
# for _ in range(1000000):
#     n = randint(1, 6)
#     a = tuple([randint(1, 10) for i in range(n)])
#     r1 = solve(n, a)
#     r2 = naive(n, a)
#     if r1 == 0 and r2 == 1:
#         print(n, a)
#         break
#     # if r1 != r2:
#     #     print("!", n, a)
#     #     break

def get():
    global k, s
    i, x = na()
    ret = ni()
    if ret == -1:
        exit()
    i -= 1
    s ^= a[i]
    a[i] -= x
    s ^= a[i]
    k = x
    return i, x

def ans():
    global k, s
    i = -1
    assert s != 0
    for j in range(n):
        for y in range(1, min(k, a[j]) + 1):
            if s == a[j] ^ (a[j] - y):
                i = j
                x = y
                break
        if i != -1:
            break
    print(i+1, x, flush=True)
    assert x <= k
    k = x
    s ^= a[i]
    a[i] -= x
    s ^= a[i]
    ret = ni()
    if ret == 1 or ret == -1:
        exit()

n = ni()
a = na()

s = 0
for i in range(n):
    s ^= a[i]

k = 10 ** 9
if s == 0:
    print("Second")
    i, x = get()
else:
    print("First")

while True:
    ans()
    get()
0