Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
134047 廖悦扬 引水入城 C++ 通过 100 32 MS 14116 KB 1540 2024-03-02 11:32:31

Tests(10/10):


#include <bits/stdc++.h> #define int long long using namespace std; const int N = 500 + 5; int n, m, g[N][N], l[N][N], r[N][N], vis[N][N]; int dx[] = {1, -1, 0, 0}; int dy[] = {0, 0, 1, -1}; struct st{ int l, r; bool operator<(const st& a) { return r < a.r; } } stu[N]; inline bool inr(int x, int y) { return x >= 1 && y >= 1 && x <= n && y <= m; } void dfs(int x, int y) { if (vis[x][y]) return; vis[x][y] = 1; for (int i=0; i<4; i++) { int tx = x + dx[i], ty = y + dy[i]; if (!inr(tx, ty) || g[tx][ty] >= g[x][y]) continue; dfs(tx, ty); l[x][y] = min(l[x][y], l[tx][ty]); r[x][y] = max(r[x][y], r[tx][ty]); // printf("TXTY %d %d: %d %d (%d, %d)\n", tx, ty, l[tx][ty], r[tx][ty], x, y); } } signed main() { scanf("%d%d", &n, &m); for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) scanf("%d", &g[i][j]); memset(l, 0x3f, sizeof l); memset(r, -0x3f, sizeof r); for (int i=1; i<=m; i++) r[n][i] = l[n][i] = i; for (int i=1; i<=m; i++) { dfs(1, i); } int cnt = 0, ans = 0; for (int i=1; i<=m; i++) { if (!vis[n][i]) cnt++; } if (cnt) { printf("0\n%d", cnt); return 0; } else { for (int i=1; i<=m; i++){ // printf("LR: %d %d\n", l[1][i], r[1][i]); stu[i].l = l[1][i]; stu[i].r = r[1][i]; } int cur = 1, mx=0; while (cur <= m) { for (int i=1; i<=m; i++) { if (stu[i].l <= cur) { mx = max(mx, stu[i].r+1); } } ans++; cur = mx; mx = 0; } printf("1\n%d", ans); } return 0; }


测评信息: