1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N = 710; const int dx[4] = {0, 1, 0, -1}; const int dy[4] = {1, 0, -1, 0}; int ans, n, m, a[N][N], mark[N][N], dp[N][N]; char s[2]; int dfs(int x, int y) { if (dp[x][y]) return dp[x][y]; dp[x][y] = 1; for (int i = 0; i <= 3; i++) { int xx = x + dx[i], yy = y + dy[i]; if (mark[xx][yy] || xx < 1 || xx > n || yy < 1 || yy > n || a[xx][yy] >= a[x][y]) continue; dp[x][y] = max(dp[x][y], dfs(xx, yy) + 1); } return dp[x][y]; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) scanf("%d", &a[i][j]); scanf("%d", &m); int aa, bb, cc, dd; while (m--) { scanf("%s", s); if (s[0] == 'C') { scanf("%d%d%d", &aa, &bb, &cc); a[aa][bb] = cc; } else if (s[0] == 'S') { scanf("%d%d%d%d", &aa, &bb, &cc, &dd); for (int i = aa; i <= cc; i++) for (int j = bb; j <= dd; j++) mark[i][j] = 1; } else if (s[0] == 'B') { scanf("%d%d%d%d", &aa, &bb, &cc, &dd); for (int i = aa; i <= cc; i++) for (int j = bb; j <= dd; j++) mark[i][j] = 0; } else if (s[0] == 'Q') { memset(dp, 0, sizeof(dp)); ans = 0; for (int i = 1; i <= n ; i++) for (int j = 1; j <= n ; j++) if (!mark[i][j]) ans = max(ans, dfs(i, j)); printf("%d\n", ans); } } return 0; }
- 1
信息
- ID
- 4873
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 34
- 已通过
- 13
- 上传者