結果
問題 | No.2696 Sign Creation |
ユーザー |
![]() |
提出日時 | 2024-03-22 22:13:29 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 838 ms / 2,500 ms |
コード長 | 2,569 bytes |
コンパイル時間 | 352 ms |
コンパイル使用メモリ | 82,276 KB |
実行使用メモリ | 93,840 KB |
最終ジャッジ日時 | 2024-12-20 11:59:27 |
合計ジャッジ時間 | 12,294 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
#############################################################import syssys.setrecursionlimit(10**7)from heapq import heappop,heappushfrom collections import deque,defaultdict,Counterfrom bisect import bisect_left, bisect_rightfrom itertools import product,combinations,permutationsipt = sys.stdin.readlinedef iin():return int(ipt())def lmin():return list(map(int,ipt().split()))class dsu:def __init__(self,n):self.N = nself.cnt=[1]*self.Nself.root=list(range(self.N))self.components = self.Ndef unite(self,x,y):x=self.leader(x)y=self.leader(y)if x!=y:self.components -= 1if self.cnt[x]<self.cnt[y]:x,y=y,xself.cnt[x]+=self.cnt[y]self.root[y]=xreturn xreturn Nonedef leader(self,x):if self.root[x]==x:return xself.root[x]=self.leader(self.root[x])return self.root[x]MOD = 998244353#############################################################H,W,N,D = lmin()A = [[-1]*W for _ in range(H)]L = [lmin() for _ in range(N)]for i,(x,y) in enumerate(L):x,y = x-1,y-1A[x][y] = iuf = dsu(N)for idx,(x,y) in enumerate(L):x,y = x-1,y-1for i in range(x-D,x+D+1):for j in range(y-D,y+D+1):if abs(x-i)+abs(y-j) > D:continueif 0 <= i < H and 0 <= j < W:if A[i][j] != -1:uf.unite(A[i][j],idx)S = set()T = set()for i in range(N):l = uf.leader(i)if uf.cnt[l] == 1:T.add(l)else:S.add(l)tmp = len(S)#print(S,T)ma = 0mi = 1<<30for x in range(H):for y in range(W):if A[x][y] != -1:continuess = set()tt = set()for i in range(x-D,x+D+1):for j in range(y-D,y+D+1):if abs(x-i)+abs(y-j) > D:continueif 0 <= i < H and 0 <= j < W:if A[i][j] != -1:l = uf.leader(A[i][j])if l in S:ss.add(l)else:tt.add(l)if not ss:if tt:ma = max(ma, tmp+1)mi = min(mi, tmp+1)else:ma = max(ma, tmp)mi = min(mi, tmp)else:ma = max(ma, tmp-len(ss)+1)mi = min(mi, tmp-len(ss)+1)print(mi,ma)