結果
| 問題 | No.1490 スライムと爆弾 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-07-06 00:25:42 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 574 ms / 2,000 ms |
| コード長 | 1,684 bytes |
| コンパイル時間 | 381 ms |
| コンパイル使用メモリ | 82,432 KB |
| 実行使用メモリ | 158,880 KB |
| 最終ジャッジ日時 | 2025-07-06 00:25:53 |
| 合計ジャッジ時間 | 10,642 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
## https://yukicoder.me/problems/no/1490
import math
def main():
H, W, N, M = map(int, input().split())
tulr = []
for _ in range(N):
t, u, l, r,a = map(int, input().split())
tulr.append((t - 1, u - 1, l -1, r - 1, a))
bombs = []
for _ in range(M):
x, y ,b, c = map(int, input().split())
bombs.append((x - 1, y - 1, b, c))
# 2次元imos法でそのセルが受ける爆風によるダメージを算出
cells = [[0] * (W + 1) for _ in range(H + 1)]
for x, y, b, c in bombs:
v00 = (max(0, x - b), max(0, y - b))
v10 = (min(H - 1, x + b), max(0, y - b))
v01 = (max(0, x - b), min(W - 1, y + b))
v11 = (min(H - 1, x + b), min(W - 1, y + b))
cells[v00[0]][v00[1]] += c
cells[v10[0] + 1][v10[1]] -= c
cells[v01[0]][v01[1] + 1] -= c
cells[v11[0] + 1][v11[1] + 1] += c
for h in range(H + 1):
row = 0
for w in range(W +1):
row += cells[h][w]
cells[h][w] = row
for w in range(W + 1):
col = 0
for h in range(H + 1):
col += cells[h][w]
cells[h][w] = col
# 累積和
cum_cells = [[0] * (W + 1) for _ in range(H + 1)]
for h in range(H):
row = 0
for w in range(W):
row += cells[h][w]
cum_cells[h + 1][w + 1] = row + cum_cells[h][w + 1]
answer = 0
for t, u, l, r, a in tulr:
damage = cum_cells[u + 1][r + 1] - cum_cells[t][r + 1] - cum_cells[u + 1][l] + cum_cells[t][l]
if damage < a:
answer += 1
print(answer)
if __name__ == "__main__":
main()