Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
37876 LYLAKIOI 【BJ】T3 C++ 通过 100 9785 MS 1548 KB 3036 2025-05-23 13:24:33

Tests(3/3):


#include <bits/stdc++.h> using namespace std; #define ll long long const int N = 110; int n, m; char c[N][N]; bool dg[N][N], ok[N][N]; // dangerous | okay bool lv[N][N]; // live int tx, ty; void dfs1(int x, int y) // �Ȱ���ȻΣ�յĶ���һ�飬TLE -> AC { if (c[x][y] == '#' || (x == tx && y == ty) || dg[x][y] || ((x == 1 || !dg[x - 1][y]) && (x == n || !dg[x + 1][y])) || ((y == 1 || !dg[x][y - 1]) && (y == m || !dg[x][y + 1]))) return; dg[x][y] = 1; if (x > 1) dfs1(x - 1, y); if (x < n) dfs1(x + 1, y); if (y > 1) dfs1(x, y - 1); if (y < m) dfs1(x, y + 1); } void dfs2(int x, int y) { if (c[x][y] == '#' || dg[x][y] || ok[x][y]) return; ok[x][y] = 1; if (x > 1 && !dg[x - 1][y] && (x < 3 || !dg[x - 2][y])) dfs2(x - 1, y); if (x < n && !dg[x + 1][y] && (x + 2 > n || !dg[x + 2][y])) dfs2(x + 1, y); if (y > 1 && !dg[x][y - 1] && (y < 3 || !dg[x][y - 2])) dfs2(x, y - 1); if (y < m && !dg[x][y + 1] && (y + 2 > m || !dg[x][y + 2])) dfs2(x, y + 1); } int main() { //freopen("walk.in", "r", stdin); //freopen("walk.out", "w", stdout); int t; scanf("%d", &t); for (int _ = 1; _ <= t; _++) { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) scanf("%s", c[i] + 1); memset(lv, 0, sizeof(lv)); for (int p = 0; p < 26; p++) { tx = ty = -1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { dg[i][j] = (c[i][j] == '*'); if (c[i][j] == p + 'A') { tx = i; ty = j; } } } if (tx < 0) continue; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) dfs1(i, j); } for (bool fg = 1; fg;) { memset(ok, 0, sizeof(ok)); dfs2(tx, ty); fg = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (c[i][j] != '#' && !dg[i][j] && !ok[i][j]) dg[i][j] = fg = 1; } } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (!dg[i][j] && islower(c[i][j])) lv[c[i][j] - 'a'][p] = 1; } } } printf("Case #%d: ", _); bool fg = 0; for (int x = 0; x < 26; x++) { for (int y = 0; y < 26; y++) { if (lv[x][y]) { fg = 1; printf("%c%c ", x + 'a', y + 'A'); } } } puts(fg ? "" : "NONE"); } return 0; }


测评信息: