Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
138847 陈家宝 引水入城 C++ 通过 100 48 MS 9656 KB 1095 2024-03-19 16:22:19

Tests(10/10):


#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; }


测评信息: