結果
| 問題 |
No.13 囲みたい!
|
| コンテスト | |
| ユーザー |
はむ吉🐹
|
| 提出日時 | 2016-05-26 22:47:45 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,802 bytes |
| コンパイル時間 | 284 ms |
| コンパイル使用メモリ | 13,056 KB |
| 実行使用メモリ | 13,056 KB |
| 最終ジャッジ日時 | 2024-10-07 16:21:06 |
| 合計ジャッジ時間 | 1,647 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 15 WA * 1 |
ソースコード
#!/usr/bin/env python3
import array
import itertools
import sys
DELTAS = [(1, 0), (-1, 0), (0, 1), (0, -1)]
UNDEF = (-1, -1)
class Solver(object):
def __init__(self, width, height, field):
self.width = width
self.height = height
self.field = field
self.visited = [array.array("B", (False for _ in range(width)))
for _ in range(height)]
self.pred = [[UNDEF for _ in range(width)] for _ in range(height)]
self.answer = False
def in_field(self, r, c):
return 0 <= r < self.height and 0 <= c < self.width
def dfs(self, r0, c0, num):
if self.field[r0][c0] != num:
return
elif self.visited[r0][c0]:
self.answer = True
return
self.visited[r0][c0] = True
for dr, dc in DELTAS:
(r, c) = (r0 + dr, c0 + dc)
if not self.in_field(r, c):
continue
elif self.pred[r0][c0] == (r, c):
continue
self.pred[r][c] = (r0, c0)
self.dfs(r, c, num)
def judge(self):
rcs = itertools.product(range(self.height), range(self.width))
for r, c in rcs:
if not self.visited[r][c]:
try:
self.dfs(r, c, self.field[r][c])
except RuntimeError:
continue
if self.answer:
return True
else:
return False
def main():
sys.setrecursionlimit(3600)
width, height = map(int, input().split())
field = [array.array("I", map(int, input().split()))
for _ in range(height)]
solver = Solver(width, height, field)
print("possible" if solver.judge() else "impossible")
if __name__ == '__main__':
main()
はむ吉🐹