結果
問題 | No.2696 Sign Creation |
ユーザー |
|
提出日時 | 2025-02-21 20:10:26 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 80 ms / 2,500 ms |
コード長 | 1,491 bytes |
コンパイル時間 | 4,279 ms |
コンパイル使用メモリ | 287,776 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2025-02-21 20:10:33 |
合計ジャッジ時間 | 6,861 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define rep(i,l,r) for(int i=(l);i<(r);i++) #define all(a) begin(a),end(a) #define sz(A) (int)(A).size() typedef long long ll; typedef vector<int> vi; typedef pair<int,int> pii; struct dsu{ vector<int>nec; dsu(int _N):nec(_N,-1){} int leader(int v){ while(nec[v]>=0)v=nec[v]; return v; } int merge(int u,int v){ u=leader(u); v=leader(v); if(u==v)return u; if(nec[u]<nec[v])swap(u,v); nec[v]+=nec[u]; nec[u]=v; return v; } int size(int v){ return -nec[leader(v)]; } }; int main(){ cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int H,W,N,D;cin>>H>>W>>N>>D; vector<vector<bool>>star(H,vector<bool>(W)); rep(i,0,N){ ll x,y;cin>>x>>y; star[x-1][y-1]=1; } dsu DSU(H*W); rep(i,0,H)rep(j,0,W)if(star[i][j]){ rep(x,i-D,i+D+1)rep(y,j-D+abs(x-i),j+D-abs(x-i)+1)if(0<=min({x,y,H-1-x,W-1-y})&&star[x][y])DSU.merge(i*W+j,x*W+y); } vector<bool>leader(H*W); rep(i,0,H)rep(j,0,W)if(DSU.size(i*W+j)>1)leader[DSU.leader(i*W+j)]=true; int c=count(all(leader),true); int mi=1e9,ma=0; rep(i,0,H)rep(j,0,W)if(!star[i][j]){ set<int>S,T; rep(x,i-D,i+D+1)rep(y,j-D+abs(x-i),j+D-abs(x-i)+1)if(0<=min({x,y,H-1-x,W-1-y})&&star[x][y]){ int l=DSU.leader(x*W+y); if(leader[l])S.insert(l); else T.insert(l); } int n=c; if(sz(T)||sz(S))n=c+1-sz(S); mi=min(n,mi); ma=max(n,ma); } cout<<mi<<" "<<ma<<endl; }