結果
問題 | No.2456 Stamp Art |
ユーザー |
![]() |
提出日時 | 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()