結果
| 問題 |
No.2696 Sign Creation
|
| コンテスト | |
| ユーザー |
SSRS
|
| 提出日時 | 2024-03-22 23:34:34 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 71 ms / 2,500 ms |
| コード長 | 2,002 bytes |
| コンパイル時間 | 2,314 ms |
| コンパイル使用メモリ | 207,672 KB |
| 最終ジャッジ日時 | 2025-02-20 12:44:21 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 38 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main(){
int H, W, N, D;
cin >> H >> W >> N >> D;
vector<int> X(N), Y(N);
for (int i = 0; i < N; i++){
cin >> X[i] >> Y[i];
X[i]--;
Y[i]--;
}
vector<vector<int>> idx(H, vector<int>(W, -1));
for (int i = 0; i < N; i++){
idx[X[i]][Y[i]] = i;
}
vector<int> C(N, -1);
int cnt = 0;
vector<int> VC;
int cnt2 = 0;
for (int i = 0; i < N; i++){
if (C[i] == -1){
C[i] = cnt;
queue<int> Q;
Q.push(i);
int V = 0;
while (!Q.empty()){
int v = Q.front();
Q.pop();
V++;
for (int dx = -D; dx <= D; dx++){
for (int dy = -(D - abs(dx)); dy <= D - abs(dx); dy++){
int x = X[v] + dx;
int y = Y[v] + dy;
if (0 <= x && x < H && 0 <= y && y < W){
if (idx[x][y] != -1){
if (C[idx[x][y]] == -1){
C[idx[x][y]] = cnt;
Q.push(idx[x][y]);
}
}
}
}
}
}
VC.push_back(V);
if (V >= 2){
cnt2++;
}
cnt++;
}
}
int mn = N + 1, mx = 0;
for (int i = 0; i < H; i++){
for (int j = 0; j < W; j++){
if (idx[i][j] == -1){
set<int> st;
for (int dx = -D; dx <= D; dx++){
for (int dy = -(D - abs(dx)); dy <= D - abs(dx); dy++){
int x = i + dx;
int y = j + dy;
if (0 <= x && x < H && 0 <= y && y < W){
if (idx[x][y] != -1){
st.insert(C[idx[x][y]]);
}
}
}
}
if (!st.empty()){
int tmp = cnt2;
for (int x : st){
if (VC[x] >= 2){
tmp--;
}
}
tmp++;
mn = min(mn, tmp);
mx = max(mx, tmp);
} else {
mn = min(mn, cnt2);
mx = max(mx, cnt2);
}
}
}
}
cout << mn << ' ' << mx << endl;
}
SSRS