結果
| 問題 |
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;
}