結果
問題 |
No.86 TVザッピング(2)
|
ユーザー |
![]() |
提出日時 | 2025-06-12 14:53:49 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,243 bytes |
コンパイル時間 | 167 ms |
コンパイル使用メモリ | 82,892 KB |
実行使用メモリ | 113,752 KB |
最終ジャッジ日時 | 2025-06-20 14:02:41 |
合計ジャッジ時間 | 7,954 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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()