結果
| 問題 | 
                            No.2641 draw X
                             | 
                    
| コンテスト | |
| ユーザー | 
                             ニックネーム
                         | 
                    
| 提出日時 | 2024-02-20 00:04:38 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                TLE
                                 
                             
                            
                            (最新)
                                AC
                                 
                             
                            (最初)
                            
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 2,262 bytes | 
| コンパイル時間 | 307 ms | 
| コンパイル使用メモリ | 82,340 KB | 
| 実行使用メモリ | 228,280 KB | 
| 最終ジャッジ日時 | 2024-09-29 03:17:24 | 
| 合計ジャッジ時間 | 19,883 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge1 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 40 TLE * 1 | 
ソースコード
h,w = map(int,input().split()); s = []
for _ in range(h): s += [v=="#" for v in input()]
lurd = s[:]
for i in range(h-1):
    for j in range(w-1):
        lurd[w*(i+1)+(j+1)] += lurd[w*i+j]
rdlu = s[:]
for i in range(h-1,0,-1):
    for j in range(w-1,0,-1):
        rdlu[w*(i-1)+(j-1)] += rdlu[w*i+j]
ruld = s[:]
for i in range(h-1):
    for j in range(w-1,0,-1):
        ruld[w*(i+1)+(j-1)] += ruld[w*i+j]
ldru = s[:]
for i in range(h-1,0,-1):
    for j in range(w-1):
        ldru[w*(i-1)+(j+1)] += ldru[w*i+j]
p1 = [0]*(h+1)*(w+1)
p2 = [0]*(h+1)*(w+1)
p3 = [0]*(h+1)*(w+1)
p4 = [0]*(h+1)*(w+1)
for i in range(1,h-1):
    for j in range(1,w-1):
        if s[w*i+j]==0: continue
        ac1 = 0; wa = min(h-i,w-j)
        while wa-ac1>1:
            wj = (ac1+wa)//2
            if lurd[w*(i+wj)+(j+wj)]-lurd[w*i+j]==wj: ac1 = wj
            else: wa = wj
        ac2 = 0; wa = min(i+1,j+1,ac1+1)
        while wa-ac2>1:
            wj = (ac2+wa)//2
            if rdlu[w*(i-wj)+(j-wj)]-rdlu[w*i+j]==wj: ac2 = wj
            else: wa = wj
        ac3 = 0; wa = min(h-i,j+1,ac2+1)
        while wa-ac3>1:
            wj = (ac3+wa)//2
            if ruld[w*(i+wj)+(j-wj)]-ruld[w*i+j]==wj: ac3 = wj
            else: wa = wj
        ac4 = 0; wa = min(i+1,w-j,ac3+1)
        while wa-ac4>1:
            wj = (ac4+wa)//2
            if ldru[w*(i-wj)+(j+wj)]-ldru[w*i+j]==wj: ac4 = wj
            else: wa = wj
        m = ac4
        if m==0: continue
        p1[(w+1)*i+j] += 1; p1[(w+1)*(i+m+1)+(j+m+1)] -= 1
        p2[(w+1)*i+j] += 1; p2[(w+1)*(i-m-1)+(j-m-1)] -= 1
        p3[(w+1)*i+j] += 1; p3[(w+1)*(i+m+1)+(j-m-1)] -= 1
        p4[(w+1)*i+j] += 1; p4[(w+1)*(i-m-1)+(j+m+1)] -= 1
t = [False]*h*w
for i in range(h):
    for j in range(w):
        t[w*i+j] |= p1[(w+1)*i+j]>0
        p1[(w+1)*(i+1)+(j+1)] += p1[(w+1)*i+j]
for i in range(h-1,-1,-1):
    for j in range(w-1,-1,-1):
        t[w*i+j] |= p2[(w+1)*i+j]>0
        p2[(w+1)*(i-1)+(j-1)] += p2[(w+1)*i+j]
for i in range(h):
    for j in range(w-1,-1,-1):
        t[w*i+j] |= p3[(w+1)*i+j]>0
        p3[(w+1)*(i+1)+(j-1)] += p3[(w+1)*i+j]
for i in range(h-1,-1,-1):
    for j in range(w):
        t[w*i+j] |= p4[(w+1)*i+j]>0
        p4[(w+1)*(i-1)+(j+1)] += p4[(w+1)*i+j]
print("Yes" if s==t else "No")
            
            
            
        
            
ニックネーム