結果
| 問題 |
No.726 Tree Game
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 17:59:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,955 bytes |
| コンパイル時間 | 246 ms |
| コンパイル使用メモリ | 82,652 KB |
| 実行使用メモリ | 54,228 KB |
| 最終ジャッジ日時 | 2025-06-12 18:00:06 |
| 合計ジャッジ時間 | 1,765 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 WA * 16 |
ソースコード
import sys
def is_prime(n):
if n <= 1:
return False
elif n <= 3:
return True
elif n % 2 == 0:
return False
d = n - 1
s = 0
while d % 2 == 0:
d //= 2
s += 1
bases = [2, 3, 5, 7, 11, 13]
for a in bases:
if a >= n:
continue
x = pow(a, d, n)
if x == 1 or x == n - 1:
continue
for _ in range(s - 1):
x = pow(x, 2, n)
if x == n - 1:
break
else:
return False
return True
def next_prime_up(n):
if n < 2:
return 2
candidate = n if n % 2 != 0 else n + 1
while True:
if is_prime(candidate):
return candidate
candidate += 2
def next_prime_right(start):
return next_prime_up(start)
def minimal_steps(n, is_y):
if is_y:
current = n + 1
else:
current = n + 1
steps = 1
while True:
if is_prime(current):
return steps
current += 1
steps += 1
Y, X = map(int, sys.stdin.readline().split())
# Check if (Y+1, X) is a losing position
cond1a = is_prime(Y + 2) or is_prime(X)
cond1b = is_prime(Y + 1) or is_prime(X + 1)
losing1 = cond1a and cond1b
# Check if (Y, X+1) is a losing position
cond2a = is_prime(Y + 1) or is_prime(X + 1)
cond2b = is_prime(Y) or is_prime(X + 2)
losing2 = cond2a and cond2b
if losing1 or losing2:
print("First")
else:
# Compute a: minimal steps moving up
a_steps = 0
current = Y + 1
while True:
if is_prime(current):
a_steps = current - Y
break
current += 1
# Compute b: minimal steps moving right
b_steps = 0
current = X + 1
while True:
if is_prime(current):
b_steps = current - X
break
current += 1
d = min(a_steps, b_steps)
if d % 2 == 0:
print("First")
else:
print("Second")
gew1fw