結果
| 問題 |
No.2520 L1 Explosion
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-02-08 04:24:02 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,267 ms / 2,000 ms |
| コード長 | 2,453 bytes |
| コンパイル時間 | 318 ms |
| コンパイル使用メモリ | 82,360 KB |
| 実行使用メモリ | 237,340 KB |
| 最終ジャッジ日時 | 2025-02-08 04:24:18 |
| 合計ジャッジ時間 | 16,256 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 |
ソースコード
## https://yukicoder.me/problems/no/2520
MOD = 998244353
def to_uv(x, y):
return x + y, x - y
def main():
N, M = map(int, input().split())
xyh = []
for _ in range(N):
x, y, h = map(int, input().split())
xyh.append((x, y, h))
uv = []
for x, y, h in xyh:
u1, v1 = to_uv(x + M - h, y)
u2, v2 = to_uv(x, y + M - h)
u3, v3 = to_uv(x - (M - h), y)
u4, v4 = to_uv(x, y - (M - h))
min_u = min(u1, u2, u3, u4)
max_u = max(u1, u2, u3, u4)
min_v = min(v1, v2, v3, v4)
max_v = max(v1, v2, v3, v4)
uv.append((min_u, min_v, max_u, max_v))
# uの世界での座標圧縮
u_set = set()
v_set = set()
for min_u, min_v, max_u, max_v in uv:
u_set.add(min_u)
u_set.add(max_u)
u_set.add(max_u + 1)
v_set.add(min_v)
v_set.add(max_v)
v_set.add(max_v + 1)
u_list = list(u_set)
u_list.sort()
u_map = {}
for i, u in enumerate(u_list):
u_map[u] = i
u_max = len(u_list)
v_list = list(v_set)
v_list.sort()
v_map = {}
for i, v in enumerate(v_list):
v_map[v] = i
v_max = len(v_list)
cells = [[0] * v_max for _ in range(u_max)]
for min_u, min_v, max_u, max_v in uv:
u1 = u_map[min_u]
v1 = v_map[min_v]
u2 = u_map[max_u]
v2 = v_map[max_v]
cells[u1][v1] += 1
cells[u2][v2] += 1
cells[u1][v2] -= 1
cells[u2][v1] -= 1
for u in range(u_max):
c = 0
for v in range(v_max):
c += cells[u][v]
cells[u][v] = c
for v in range(v_max):
c = 0
for u in range(u_max):
c += cells[u][v]
cells[u][v] = c
# 面積計算
answers = [0] * N
inv_2 = pow(2, MOD - 2, MOD)
for u in range(u_max - 1):
for v in range(v_max - 1):
x = cells[u][v]
if x > 0:
u1 = u_list[u]
u2 = u_list[u + 1]
v1 = v_list[v]
v2 = v_list[v + 1]
dv = (v2 - v1) % MOD
du = (u2 - u1 ) % MOD
ans = (dv * du) % MOD
ans *= inv_2
ans %= MOD
answers[x - 1] += ans
answers[x - 1] %= MOD
for i in range(N):
print(answers[i])
if __name__ == "__main__":
main()