結果

問題 No.13 囲みたい!
ユーザー ゆるくゆるく
提出日時 2014-11-09 02:31:59
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 58 ms / 5,000 ms
コード長 1,188 bytes
コンパイル時間 112 ms
コンパイル使用メモリ 12,800 KB
実行使用メモリ 11,904 KB
最終ジャッジ日時 2024-04-21 12:14:24
合計ジャッジ時間 1,738 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 35 ms
11,392 KB
testcase_01 AC 35 ms
11,264 KB
testcase_02 AC 35 ms
11,392 KB
testcase_03 AC 55 ms
11,776 KB
testcase_04 AC 39 ms
11,520 KB
testcase_05 AC 56 ms
11,776 KB
testcase_06 AC 55 ms
11,648 KB
testcase_07 AC 56 ms
11,776 KB
testcase_08 AC 58 ms
11,904 KB
testcase_09 AC 58 ms
11,776 KB
testcase_10 AC 39 ms
11,392 KB
testcase_11 AC 52 ms
11,648 KB
testcase_12 AC 37 ms
11,520 KB
testcase_13 AC 42 ms
11,520 KB
testcase_14 AC 43 ms
11,520 KB
testcase_15 AC 35 ms
11,520 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
#sys.setrecursionlimit(n)
import heapq
import re
import bisect
import random
import math
import itertools
from collections import defaultdict, deque
from copy import deepcopy

w, h = map(int, input().split())
m = [[int(i) for i in input().split()] for i in range(h)] 
d = [[0 for _ in range(w)] for _ in range(h)]

dist = ((1,0), (-1,0), (0,1), (0,-1))
def solve(x, y):
  q = deque()
  q.append((x << 32) + (y << 16) + (0xFF << 8) + 0xFF)
  d[y][x] = True
  while (q):
    v = q.popleft()
    vx = v >> 32
    vy = (v >> 16) & 0xFF
    ox = (v >> 8) & 0xFF
    oy = v & 0xFF
    for fdist in dist:
      ny = vy + fdist[0]
      nx = vx + fdist[1]
      if nx == ox and ny == oy:
        continue
      if nx >= w or nx < 0 or ny >= h or ny < 0:
        continue
      if m[ny][nx] != m[y][x]:
        continue
      if d[ny][nx]:
        return True
      d[ny][nx] = True
      q.append((nx << 32) + (ny << 16) + (vx << 8) + vy)
  return False

flag = False
for y in range(h):
  for x in range(w):
    if d[y][x]:
      continue
    if solve(x, y):
      flag = True
      break

print("possible" if flag else "impossible")
0