結果

問題 No.2946 Puyo
ユーザー ゼット
提出日時 2024-10-25 21:30:27
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 517 ms / 2,000 ms
コード長 1,003 bytes
コンパイル時間 340 ms
コンパイル使用メモリ 82,464 KB
実行使用メモリ 176,096 KB
最終ジャッジ日時 2024-10-25 21:30:43
合計ジャッジ時間 15,816 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 45
権限があれば一括ダウンロードができます

ソースコード

diff #

class unif:
  def __init__(self,n):
    self.pare=[-1]*n
    self.size=[1]*n
  def root(self,x):
    while self.pare[x]!=-1:
      x=self.pare[x]
    return x
  def unite(self,u,v):
    rootu=self.root(u)
    rootv=self.root(v)
    if rootu!=rootv:
      if self.size[rootu]>=self.size[rootv]:
        self.pare[rootv]=rootu
        self.size[rootu]+=self.size[rootv]
      else:
        self.pare[rootu]=rootv
        self.size[rootv]+=self.size[rootu]
  def same(self,s,t):
    return self.root(s)==self.root(t)
H,W=map(int,input().split())
A=[input() for i in range(H)]
result=[[0]*W for i in range(H)]
for i in range(H):
  for j in range(W):
    result[i][j]=A[i][j]
Z=unif(H*W)
for i in range(H):
  for j in range(W):
    if i<H-1:
      if A[i][j]==A[i+1][j]:
        Z.unite(i*W+j,(i+1)*W+j)
    if j<W-1:
      if A[i][j]==A[i][j+1]:
        Z.unite(i*W+j,i*W+j+1)
for i in range(H):
  for j in range(W):
    x=Z.root(i*W+j)
    if Z.size[x]>=4:
      result[i][j]='.'
  print(*result[i],sep='')
0