結果
| 問題 |
No.3121 Prime Dance
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-04-20 18:09:02 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,998 bytes |
| コンパイル時間 | 253 ms |
| コンパイル使用メモリ | 12,416 KB |
| 実行使用メモリ | 11,008 KB |
| 最終ジャッジ日時 | 2025-04-20 18:09:04 |
| 合計ジャッジ時間 | 2,213 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 7 WA * 14 |
ソースコード
import sys
from collections import deque
def sieve(n):
is_prime = [False, False] + [True] * (n - 1)
for i in range(2, int(n**0.5) + 1):
if is_prime[i]:
for j in range(i*i, n + 1, i):
is_prime[j] = False
return is_prime
def find_min_prime_sum(delta, is_prime, primes):
INF = 10**18
best = INF
for q in primes:
p = q + delta
if p >= 2 and p < len(is_prime) and is_prime[p]:
best = p + q
break
return best if best < INF else None
def main():
input = sys.stdin.readline
H, W = map(int, input().split())
sx, sy = map(int, input().split())
gx, gy = map(int, input().split())
sx -= 1; sy -= 1
gx -= 1; gy -= 1
grid = [list(input().rstrip()) for _ in range(H)]
seen = [[False]*W for _ in range(H)]
q = deque()
q.append((sx, sy))
seen[sx][sy] = True
comp = []
while q:
x, y = q.popleft()
comp.append((x, y))
for dx, dy in ((1,0),(-1,0),(0,1),(0,-1)):
nx, ny = x+dx, y+dy
if 0 <= nx < H and 0 <= ny < W and not seen[nx][ny] and grid[nx][ny] != '#':
seen[nx][ny] = True
q.append((nx, ny))
if not seen[gx][gy]:
print(-1)
return
vert_ok = False
hori_ok = False
for x, y in comp:
if x+1 < H and seen[x+1][y]:
vert_ok = True
if y+1 < W and seen[x][y+1]:
hori_ok = True
if vert_ok and hori_ok:
break
if not vert_ok or not hori_ok:
print(-1)
return
MAXP = 20000
is_prime = sieve(MAXP)
primes = [i for i in range(2, MAXP+1) if is_prime[i]]
dx = gx - sx
dy = gy - sy
row_sum = find_min_prime_sum(dx, is_prime, primes)
col_sum = find_min_prime_sum(dy, is_prime, primes)
if row_sum is None or col_sum is None:
print(-1)
else:
print(row_sum + col_sum)
if __name__ == "__main__":
main()