結果
| 問題 |
No.86 TVザッピング(2)
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 20:12:01 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,243 bytes |
| コンパイル時間 | 180 ms |
| コンパイル使用メモリ | 82,524 KB |
| 実行使用メモリ | 108,544 KB |
| 最終ジャッジ日時 | 2025-06-20 14:03:00 |
| 合計ジャッジ時間 | 8,477 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | AC * 6 WA * 1 TLE * 1 -- * 22 |
ソースコード
import sys
from sys import stdin
sys.setrecursionlimit(1 << 25)
def main():
N, M = map(int, stdin.readline().split())
grid = [stdin.readline().strip() for _ in range(N)]
dirs = [ ( -1, 0 ), (0, 1), (1, 0), (0, -1) ] # up, right, down, left
dir_names = ['U', 'R', 'D', 'L']
dir_idx = { 'U':0, 'R':1, 'D':2, 'L':3 }
total = 0
for i in range(N):
for j in range(M):
if grid[i][j] == '.':
total += 1
if total == 1:
print("NO")
return
def valid(x, y):
return 0<=x<N and 0<=y<M and grid[x][y] == '.'
visited = [[False for _ in range(M)] for __ in range(N)]
path = []
found = False
def dfs(x, y, prev_dir, count, start_x, start_y):
nonlocal found
if found:
return
if count == total:
if valid(start_x, start_y):
nx = x + dirs[prev_dir][0]
ny = y + dirs[prev_dir][1]
if (nx == start_x and ny == start_y) or (nx == x and ny == y):
found = True
return
else:
nx = x + dirs[prev_dir][0]
ny = y + dirs[prev_dir][1]
if (nx, ny) == (start_x, start_y):
found = True
return
return
for d in [prev_dir, (prev_dir + 1) %4]:
dx, dy = dirs[d]
nx = x + dx
ny = y + dy
if valid(nx, ny) and not visited[nx][ny]:
visited[nx][ny] = True
path.append( (nx, ny, d) )
dfs(nx, ny, d, count +1, start_x, start_y)
if found:
return
visited[nx][ny] = False
path.pop()
for i in range(N):
for j in range(M):
if grid[i][j] == '.':
for d in range(4):
visited[i][j] = True
path = [ (i,j,d) ]
dfs(i, j, d, 1, i, j)
visited[i][j] = False
if found:
print("YES")
return
print("NO")
if __name__ == "__main__":
main()
gew1fw