Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
138847 | 陈家宝 | 引水入城 | C++ | 通过 | 100 | 48 MS | 9656 KB | 1095 | 2024-03-19 16:22:19 |
#include<bits/stdc++.h> using namespace std; int n, m,g[550][550],l[550][550], r[550][500],dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1, 0, 0}; bool st[550][550]; void dfs(int x, int y) { st[x][y]=1; for (int i = 0; i < 4; i++) { int nx=x+dx[i], ny=y+dy[i]; if (nx<1||nx>n||ny<1||ny>m) continue; if (g[nx][ny] >= g[x][y]) continue; if (!st[nx][ny]) dfs(nx, ny); l[x][y] = min(l[x][y], l[nx][ny]); r[x][y] = max(r[x][y], r[nx][ny]); } } int main() { cin >> n >> m; for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> g[i][j]; memset(l, 0x3f3f3f3f, sizeof l); memset(r, -0x3f3f3f3f, sizeof r); for (int i = 1; i <= m; i++) { l[n][i] = i; r[n][i] = i; } for (int i = 1; i <= m; i++)if (!st[1][i]) dfs(1, i); int cnt = 0; for (int i = 1; i <= m; i++)cnt += (!st[n][i]); if (cnt) { cout << 0 << endl << cnt; return 0; } int left = 1; while (left <= m) { int maxv = 0; for (int i = 1; i <= m; i++)if (l[1][i] <= left)maxv = max(maxv, r[1][i]); left = maxv + 1; cnt++; } cout << 1 << endl << cnt; return 0; }