結果
| 問題 |
No.60 魔法少女
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-08-11 22:46:08 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 142 ms / 5,000 ms |
| コード長 | 1,032 bytes |
| コンパイル時間 | 3,509 ms |
| コンパイル使用メモリ | 206,092 KB |
| 実行使用メモリ | 17,064 KB |
| 最終ジャッジ日時 | 2025-08-11 22:46:19 |
| 合計ジャッジ時間 | 6,209 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 10 |
ソースコード
module main;
// https://mmxsrup.hatenablog.com/entry/2016/09/30/154952 より
// いもす法
import std;
void main()
{
int N, K;
readln.chomp.formattedRead("%d %d", N, K);
auto X = new int[](N), Y = new int[](N), HP = new int[](N);
foreach (ref x, ref y, ref hp; lockstep(X, Y, HP)) {
readln.chomp.formattedRead("%d %d %d", x, y, hp);
x += 500, y += 500;
}
auto imos = new int[][](1510, 1510);
foreach (_; 0 .. K) {
int ax, ay, w, h, d;
readln.chomp.formattedRead("%d %d %d %d %d", ax, ay, w, h, d);
ax += 500, ay += 500;
// 左上
imos[ay][ax] += d;
// 右上
imos[ay][ax + w + 1] -= d;
// 左下
imos[ay + h + 1][ax] -= d;
// 右下
imos[ay + h + 1][ax + w + 1] += d;
}
// 横方向の累積和
foreach (i; 0 .. 1505)
foreach (j; 0 .. 1505)
imos[i][j + 1] += imos[i][j];
// 縦方向の累積和
foreach (i; 0 .. 1505)
foreach (j; 0 .. 1505)
imos[i + 1][j] += imos[i][j];
long ans = 0;
foreach (y, x, hp; lockstep(Y, X, HP))
ans += max(0L, hp - imos[y][x]);
writeln(ans);
}