結果
問題 |
No.2696 Sign Creation
|
ユーザー |
![]() |
提出日時 | 2024-03-23 05:07:29 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 122 ms / 2,500 ms |
コード長 | 2,907 bytes |
コンパイル時間 | 1,943 ms |
コンパイル使用メモリ | 214,176 KB |
最終ジャッジ日時 | 2025-02-20 13:04:03 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
#include <bits/stdc++.h> using namespace std; void fast_io() { ios::sync_with_stdio(false); std::cin.tie(nullptr); } int main() { fast_io(); int h, w, n, d; cin >> h >> w >> n >> d; vector<vector<int>> stars(h, vector<int>(w, 0)); for (int i = 0; i < n; i++) { int x, y; cin >> x >> y; stars[x - 1][y - 1] = -1; } int cur = 1, su = 0; auto is_in = [&](int x, int y) { return x >= 0 && x < h && y >= 0 && y < w; }; vector<bool> is_single{false}; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if (!stars[i][j] || stars[i][j] != -1) { continue; } stars[i][j] = cur; deque<pair<int, int>> q{{i, j}}; int cnt = 0; while (!q.empty()) { auto [x, y] = q.front(); q.pop_front(); cnt++; for (int k = 1; k <= d; k++) { for (int di = -k; di <= k; di++) { for (int dj = -k; dj <= k; dj++) { if (abs(di) + abs(dj) > k) { continue; } if (!is_in(x + di, y + dj)) { continue; } if (stars[x + di][y + dj] == -1) { stars[x + di][y + dj] = cur; q.push_back({x + di, y + dj}); } } } } } cur++; is_single.push_back(cnt == 1); if (cnt != 1) { su++; } } } int mi = 1e9, ma = -1; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if (stars[i][j]) { continue; } set<int> conn; for (int k = 1; k <= d; k++) { for (int di = -k; di <= k; di++) { for (int dj = -k; dj <= k; dj++) { if (abs(di) + abs(dj) > k) { continue; } if (!is_in(i + di, j + dj)) { continue; } if (stars[i + di][j + dj]) { conn.insert(stars[i + di][j + dj]); } } } } int tmp = su + 1; for (int c : conn) { if (!is_single[c]) { tmp--; } } if (conn.size() == 0) { tmp--; } mi = min(mi, tmp); ma = max(ma, tmp); } } cout << mi << " " << ma << endl; }