結果
問題 |
No.2456 Stamp Art
|
ユーザー |
![]() |
提出日時 | 2025-06-12 15:19:03 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,636 bytes |
コンパイル時間 | 190 ms |
コンパイル使用メモリ | 82,516 KB |
実行使用メモリ | 339,076 KB |
最終ジャッジ日時 | 2025-06-12 15:19:11 |
合計ジャッジ時間 | 8,112 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | TLE * 1 -- * 22 |
ソースコード
import sys from collections import deque def main(): H, W = map(int, sys.stdin.readline().split()) S = [] for _ in range(H): line = sys.stdin.readline().strip() S.append(['.'] + list(line)) S = [['.']*(W+1)] + S # 1-based indexing # Precompute max_k: size of the largest square starting at (i,j) that is entirely black max_k = [[0]*(W+2) for _ in range(H+2)] for i in range(H, 0, -1): for j in range(W, 0, -1): if S[i][j] == '#': if i == H or j == W: max_k[i][j] = 1 else: max_k[i][j] = 1 + min(max_k[i+1][j], max_k[i][j+1], max_k[i+1][j+1]) else: max_k[i][j] = 0 low = 1 high = min(H, W) answer = 0 def is_possible(k): if k == 0: return False row_max = [[0]*(W+1) for _ in range(H+1)] for i in range(1, H+1): dq = deque() for j in range(1, W+1): while dq and dq[0] < j - k + 1: dq.popleft() while dq and max_k[i][dq[-1]] <= max_k[i][j]: dq.pop() dq.append(j) if j >= k: row_max[i][j] = max_k[i][dq[0]] else: current_max = 0 for b in range(1, j+1): if max_k[i][b] > current_max: current_max = max_k[i][b] row_max[i][j] = current_max col_max = [[0]*(W+1) for _ in range(H+1)] for j in range(1, W+1): dq = deque() for i in range(1, H+1): while dq and dq[0] < i - k + 1: dq.popleft() while dq and row_max[dq[-1]][j] <= row_max[i][j]: dq.pop() dq.append(i) if i >= k: col_max[i][j] = row_max[dq[0]][j] else: current_max = 0 for a in range(1, i+1): if row_max[a][j] > current_max: current_max = row_max[a][j] col_max[i][j] = current_max for i in range(1, H+1): for j in range(1, W+1): if S[i][j] == '#' and col_max[i][j] < k: return False return True while low <= high: mid = (low + high) // 2 if is_possible(mid): answer = mid low = mid + 1 else: high = mid - 1 print(answer) if __name__ == '__main__': main()