結果

問題 No.86 TVザッピング(2)
ユーザー maspymaspy
提出日時 2020-04-01 00:37:57
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
WA  
実行時間 -
コード長 1,433 bytes
コンパイル時間 466 ms
コンパイル使用メモリ 13,056 KB
実行使用メモリ 11,136 KB
最終ジャッジ日時 2024-06-25 14:50:43
合計ジャッジ時間 2,135 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 29 WA * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

#!/usr/bin/ python3.8
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines

H, W = map(int, readline().split())
A = ['#' * (W + 2)]
for _ in range(H):
    A.append('#' + readline().decode().rstrip() + '#')
A += ['#' * (W + 2)]
A = tuple(''.join(A))

H += 2
W += 2
dx = (1, -W, -1, W)
S = A.index('.')
if A[S + W] == '#':
    print('NO')
    exit()


def get_path(i, di):
    x = S
    path = [x]
    se = set([x])
    while True:
        d = dx[i]
        if A[x + d] == '.':
            x += d
            if x in se:
                return path
            path.append(x)
            se.add(x)
            continue
        i = (i + di) % 4
        d = dx[i]
        if A[x + d] == '.':
            x += d
            if x in se:
                return path
            path.append(x)
            se.add(x)
            continue
        return path


path1 = get_path(0, -1)
path2 = []
P = get_path(3, 1)[1:]
n = sum(x == '.' for x in A)

seP = set(path1)
seQ = set()
p = 0

found = False
while path1:
    while True:
        if p < len(P) and ((P[p] not in seP) or (P[p] == path1[-1])):
            seQ.add(P[p])
            path2.append(P[p])
            p += 1
        else:
            break
    if path2 and path1[-1] == path2[-1] and len(path1) + len(path2) == n + 1:
        found = True
        break
    seP.remove(path1.pop())

print('YES' if found else 'NO')
0