結果
| 問題 |
No.2456 Stamp Art
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:44:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 2,400 bytes |
| コンパイル時間 | 178 ms |
| コンパイル使用メモリ | 82,356 KB |
| 実行使用メモリ | 631,684 KB |
| 最終ジャッジ日時 | 2025-03-20 20:45:07 |
| 合計ジャッジ時間 | 8,593 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 3 MLE * 1 -- * 19 |
ソースコード
import sys
def main():
H, W = map(int, sys.stdin.readline().split())
grid = []
black = []
white = set()
for i in range(H):
S = sys.stdin.readline().strip()
grid_row = []
for j in range(W):
if S[j] == '#':
black.append((i+1, j+1))
else:
white.add((i+1, j+1))
grid.append(S)
# Precompute cumulative sum for white cells (1-based index)
cum_white = [[0]*(W+2) for _ in range(H+2)]
for i in range(1, H+1):
for j in range(1, W+1):
cum_white[i][j] = cum_white[i-1][j] + cum_white[i][j-1] - cum_white[i-1][j-1]
if (i, j) in white:
cum_white[i][j] += 1
max_k = min(H, W)
for k in range(max_k, 0, -1):
a_max = H - k + 1
b_max = W - k + 1
if a_max < 1 or b_max < 1:
continue
# Collect allowed (a, b)
allowed = []
for a in range(1, a_max + 1):
for b in range(1, b_max + 1):
i2 = a + k - 1
j2 = b + k - 1
# Check if there are no white cells in the k x k square starting at (a, b)
count = cum_white[i2][j2] - cum_white[a-1][j2] - cum_white[i2][b-1] + cum_white[a-1][b-1]
if count == 0:
allowed.append((a, b))
if not allowed:
continue
# Check all black cells are covered by at least one allowed (a, b)
valid = True
for (i, j) in black:
a_start = max(1, i - k + 1)
a_end = min(a_max, i)
b_start = max(1, j - k + 1)
b_end = min(b_max, j)
found = False
for a in range(a_start, a_end + 1):
i1 = a
i2 = a + k - 1
if i1 > i or i2 < i:
continue
for b in range(b_start, b_end + 1):
j1 = b
j2 = b + k - 1
if j1 > j or j2 < j:
continue
if (a, b) in allowed:
found = True
break
if found:
break
if not found:
valid = False
break
if valid:
print(k)
return
print(1)
if __name__ == "__main__":
main()
lam6er