1 条题解
-
1
#include <queue> using namespace std; int N; int grid[500][500]; bool visited[500][500]; int dx[] = {0, 0, 1, -1}; int dy[] = {1, -1, 0, 0}; int target; int bfs(int sx, int sy, int D) { queue<pair<int,int>> q; q.push({sx, sy}); visited[sx][sy] = true; int cnt = 1; while (!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); for (int d = 0; d < 4; d++) { int nx = x + dx[d]; int ny = y + dy[d]; if (nx < 0 || nx >= N || ny < 0 || ny >= N) continue; if (visited[nx][ny]) continue; int diff = grid[x][y] - grid[nx][ny]; if (diff < 0) diff = -diff; if (diff > D) continue; visited[nx][ny] = true; cnt++; q.push({nx, ny}); } } return cnt; } bool check(int D) { for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) visited[i][j] = false; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (!visited[i][j]) { if (bfs(i, j, D) >= target) return true; } } } return false; } int main() { cin >> N; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) cin >> grid[i][j]; target = (N * N + 1) / 2; int lo = 0, hi = 1000000; while (lo < hi) { int mid = (lo + hi) / 2; if (check(mid)) { hi = mid; } else { lo = mid + 1; } } cout << lo << endl; return 0; }
- 1
信息
- ID
- 2126
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 3
- 上传者