結果
| 問題 | No.1490 スライムと爆弾 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-29 23:24:46 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 95 ms / 2,000 ms |
| + 573µs | |
| コード長 | 1,337 bytes |
| 記録 | |
| コンパイル時間 | 3,030 ms |
| コンパイル使用メモリ | 181,708 KB |
| 実行使用メモリ | 68,352 KB |
| 最終ジャッジ日時 | 2026-10-29 23:24:55 |
| 合計ジャッジ時間 | 7,681 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int H, W, N, M; cin>>H>>W>>N>>M;
vector<int> T(N), U(N), L(N), R(N);
vector<ll> A(N);
for (int i=0;i<N;i++) cin>>T[i]>>U[i]>>L[i]>>R[i]>>A[i];
vector<vector<ll>> field(H+1, vector<ll>(W+1, 0));
for (int i=0;i<M;i++){
int X, Y, B; ll C;
cin>>X>>Y>>B>>C;
int Xmin=max(X-B, 1), Xmax=min(X+B, H)+1;
int Ymin=max(Y-B, 1), Ymax=min(Y+B, W)+1;
field[Xmin][Ymin] += C;
if (Xmax<=H) field[Xmax][Ymin] -= C;
if (Ymax<=W) field[Xmin][Ymax] -= C;
if (Xmax<=H && Ymax<=W) field[Xmax][Ymax] += C;
}
for (int i=1;i<=H;i++){
for (int j=1;j<=W;j++) field[i][j] += field[i-1][j];
}
for (int i=1;i<=H;i++){
for (int j=1;j<=W;j++) field[i][j] += field[i][j-1];
}
vector<vector<ll>> sum = field;
for (int i=1;i<=H;i++){
for (int j=1;j<=W;j++) sum[i][j] += sum[i-1][j];
}
for (int i=1;i<=H;i++){
for (int j=1;j<=W;j++) sum[i][j] += sum[i][j-1];
}
int ans = 0;
for (int i=0;i<N;i++){
ll damage = sum[U[i]][R[i]]-sum[U[i]][L[i]-1]-sum[T[i]-1][R[i]]+sum[T[i]-1][L[i]-1];
if(damage<A[i]) ans++;
}
cout << ans << "\n";
}