diff --git a/src/10/1/P4162.cpp b/src/10/1/P4162.cpp index 294989d..3e2e5d6 100644 --- a/src/10/1/P4162.cpp +++ b/src/10/1/P4162.cpp @@ -1,3 +1,89 @@ -int main(){ +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +const int MAXN = 35; +const int dx[4] = {0, 1, 0, -1}; +const int dy[4] = {1, 0, -1, 0}; + +int n, m, T; +char grid[MAXN][MAXN]; + +bool isValid(int x, int y) { + return x >= 0 && x < n && y >= 0 && y < m; +} + +vector> bfs01(int sx, int sy) { + vector> dist(n, vector(m, 0x3f3f3f3f)); + vector> visited(n, vector(m, false)); + deque> dq; -} \ No newline at end of file + int startcost = (grid[sx][sy] == '1') ? 1 : 0; + dist[sx][sy] = startcost; + dq.push_back({sx, sy}); + + while (!dq.empty()) { + auto [x, y] = dq.front(); + dq.pop_front(); + + if (visited[x][y]) continue; + visited[x][y] = true; + + for (int i = 0; i < 4; i++) { + int nx = x + dx[i]; + int ny = y + dy[i]; + + if (!isValid(nx, ny)) continue; + + int cost = (grid[nx][ny] == '1') ? 1 : 0; + if (dist[x][y] + cost < dist[nx][ny]) { + dist[nx][ny] = dist[x][y] + cost; + if (cost == 0) { + dq.push_front({nx, ny}); + } else { + dq.push_back({nx, ny}); + } + } + } + } + + return dist; +} + +double euladis(int x1, int y1, int x2, int y2) { + return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); +} + +int main() { + ios::sync_with_stdio(false); + cin.tie(nullptr); + + cin >> n >> m >> T; + + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + cin >> grid[i][j]; + } + } + + double maxdis = 0.0; + + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + auto dist = bfs01(i, j); + for (int x = 0; x < n; x++) { + for (int y = 0; y < m; y++) { + if (dist[x][y] <= T) { + maxdis = max(maxdis, euladis(i, j, x, y)); + } + } + } + } + } + printf("%.6f\n", maxdis); +}