結果
問題 | No.1490 スライムと爆弾 |
ユーザー |
![]() |
提出日時 | 2021-04-23 22:37:52 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 781 ms / 2,000 ms |
コード長 | 2,098 bytes |
コンパイル時間 | 1,871 ms |
コンパイル使用メモリ | 76,560 KB |
実行使用メモリ | 82,796 KB |
最終ジャッジ日時 | 2024-07-04 08:23:18 |
合計ジャッジ時間 | 12,932 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] sa = br.readLine().split(" "); int h = Integer.parseInt(sa[0]); int w = Integer.parseInt(sa[1]); int n = Integer.parseInt(sa[2]); int m = Integer.parseInt(sa[3]); int[] t = new int[n]; int[] u = new int[n]; int[] l = new int[n]; int[] r = new int[n]; int[] a = new int[n]; for (int i = 0; i < n; i++) { sa = br.readLine().split(" "); t[i] = Integer.parseInt(sa[0]) - 1; u[i] = Integer.parseInt(sa[1]); l[i] = Integer.parseInt(sa[2]) - 1; r[i] = Integer.parseInt(sa[3]); a[i] = Integer.parseInt(sa[4]); } int[] x = new int[m]; int[] y = new int[m]; int[] b = new int[m]; int[] c = new int[m]; for (int i = 0; i < m; i++) { sa = br.readLine().split(" "); x[i] = Integer.parseInt(sa[0]); y[i] = Integer.parseInt(sa[1]); b[i] = Integer.parseInt(sa[2]); c[i] = Integer.parseInt(sa[3]); } br.close(); long[][] z = new long[h + 2][w + 2]; for (int i = 0; i < m; i++) { int lx = Math.max(x[i] - b[i], 0); int rx = Math.min(x[i] + b[i] + 1, h + 1); int ly = Math.max(y[i] - b[i], 0); int ry = Math.min(y[i] + b[i] + 1, w + 1); z[lx][ly] += c[i]; z[lx][ry] -= c[i]; z[rx][ly] -= c[i]; z[rx][ry] += c[i]; } for (int i = 0; i <= h + 1; i++) { for (int j = 0; j <= w; j++) { z[i][j + 1] += z[i][j]; } } for (int j = 0; j <= w + 1; j++) { for (int i = 0; i <= h; i++) { z[i + 1][j] += z[i][j]; } } for (int i = 0; i <= h + 1; i++) { for (int j = 0; j <= w; j++) { z[i][j + 1] += z[i][j]; } } for (int j = 0; j <= w + 1; j++) { for (int i = 0; i <= h; i++) { z[i + 1][j] += z[i][j]; } } int ans = 0; for (int i = 0; i < n; i++) { long dam = 0; dam += z[u[i]][r[i]]; dam -= z[u[i]][l[i]]; dam -= z[t[i]][r[i]]; dam += z[t[i]][l[i]]; if (dam < a[i]) { ans++; } } System.out.println(ans); } }