結果
| 問題 | 
                            No.2520 L1 Explosion
                             | 
                    
| コンテスト | |
| ユーザー | 
                             titia
                         | 
                    
| 提出日時 | 2023-11-01 01:56:58 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 400 ms / 2,000 ms | 
| コード長 | 1,466 bytes | 
| コンパイル時間 | 313 ms | 
| コンパイル使用メモリ | 82,124 KB | 
| 実行使用メモリ | 149,248 KB | 
| 最終ジャッジ日時 | 2024-09-25 17:50:51 | 
| 合計ジャッジ時間 | 6,499 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge1 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 22 | 
ソースコード
import sys
input = sys.stdin.readline
mod=998244353
N,M=map(int,input().split())
XY=[list(map(int,input().split())) for i in range(N)]
LIST=[]
LISTX=[]
LISTY=[]
for x,y,h in XY:
    x0=x+y
    y0=x-y
    
    if h<=M:
        k=M-h
        LIST.append([x0-k,y0-k,+1])
        LIST.append([x0+k,y0-k,-1])
        LIST.append([x0-k,y0+k,-1])
        LIST.append([x0+k,y0+k,+1])
        LISTX.append(x0-k)
        LISTX.append(x0+k)
        #LISTX.append(x0+k+1)
        LISTY.append(y0-k)
        LISTY.append(y0+k)
        #LISTY.append(y0+k+1)
LISTX=sorted(set(LISTX))
LISTY=sorted(set(LISTY))
#LISTX=list(range(-10,10))
#LISTY=list(range(-10,10))
DX={LISTX[i]:i for i in range(len(LISTX))}
DY={LISTY[i]:i for i in range(len(LISTY))}
for i in range(len(LIST)):
    LIST[i][0]=DX[LIST[i][0]]
    LIST[i][1]=DY[LIST[i][1]]
DP=[[0]*(len(LISTX)+4) for i in range(len(LISTX)+4)]
for x,y,h in LIST:
    DP[x][y]+=h
#print(LIST)
#for dp in DP:
#    print(*dp)
#print()
for i in range(len(LISTX)):
    for j in range(len(LISTY)):
        DP[i][j]+=DP[i-1][j]
for i in range(len(LISTX)):
    for j in range(len(LISTY)):
        DP[i][j]+=DP[i][j-1]
        
#for dp in DP:
#    print(*dp)
ANS=[0]*(N+1)
for i in range(len(LISTX)-1):
    for j in range(len(LISTY)-1):
        ANS[DP[i][j]]+=(LISTX[i+1]-LISTX[i])*(LISTY[j+1]-LISTY[j])
        #print(i,j,ANS)
INV=pow(2,mod-2,mod)
for i in range(1,len(ANS)):
    ANS[i]=ANS[i]*INV%mod
    print(ANS[i])
    
            
            
            
        
            
titia