結果
| 問題 |
No.157 2つの空洞
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-03-02 11:31:35 |
| 言語 | Python2 (2.7.18) |
| 結果 |
AC
|
| 実行時間 | 17 ms / 2,000 ms |
| コード長 | 2,512 bytes |
| コンパイル時間 | 94 ms |
| コンパイル使用メモリ | 7,040 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-24 01:08:16 |
| 合計ジャッジ時間 | 1,245 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import itertools
import math
from collections import Counter, defaultdict
class Main(object):
def __init__(self):
pass
def solve(self):
'''
insert your code
'''
w, h = map(int, raw_input().split())
board = []
for i in range(h):
row = list(raw_input())
board.append(row)
cave = set()
d = [(0, 1), (1, 0), (0, -1), (-1, 0)]
flg = False
for i in range(h):
for j in range(w):
if board[i][j] == '.':
s = [(i, j, 0)]
while s:
y, x, num = s.pop()
# print y, x
board[y][x] = '0'
cave.add((y, x, 0))
for dy, dx in d:
if 0 <= y + dy < h and 0 <= x + dx < w and (not (y + dy, x + dx, 0) in cave) and board[y+dy][x+dx] == '.':
s.append((y + dy, x + dx, 0))
flg = True
break
if flg:
break
# print cave
# for i in range(len(board)):
# print ''.join(board[i])
# print board
# q = list(cave)
# used = set()
# for y, x, num in q:
# used.add((y, x))
q = []
for i in range(h):
for j in range(w):
if board[i][j] == '0':
q.append((i, j))
while q:
y, x = q.pop(0)
if board[y][x] == '.':
print num - 1
break
num = int(board[y][x])
# print y, x, num
# board[y][x] = str(num)
# used.add((y, x))
# for i in range(len(board)):
# print ''.join(board[i])
for dy, dx in d:
if 0 <= y + dy < h and 0 <= x + dx < w:
# for i in range(num+1):
# if (y + dy, x + dx, i) in cave:
# break
if board[y+dy][x+dx] == '#':
board[y+dy][x+dx] = str(num+1)
q.append((y + dy, x + dx))
elif board[y+dy][x+dx] == '.':
q.append((y + dy, x + dx))
return None
if __name__ == '__main__':
m = Main()
m.solve()