D - Grid and Magnet

思路:标记一下磁铁周围的空地即可,每个连通块一定可以互相到达,我们dfs算出联通块的大小再加上该连通块周围的可达磁场区域即可。

代码:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int n, m;
    cin >> n >> m;
    vector vis(n, vector(m, false));
    vector<string> mp(n);
    for (int i = 0; i < n; i++) {
        cin >> mp[i];
    }
    const int dr[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
    auto check = [&](int x, int y) {
        return (x >= 0 && x < n && y >= 0 && y < m);
    };
    auto magnets = [&](int x, int y) {
        for (int d = 0; d < 4; d++) {
            int nx = x + dr[d][0], ny = y + dr[d][1];
            if (check(nx, ny) && mp[nx][ny] == '#') {
                return true;
            }
        }
        return false;
    };
    int tag = 0;
    vector vtag(n, vector(m, 0));
    auto dfs = [&](auto &&self, int x, int y) -> int {
        if (vis[x][y] || mp[x][y] == '#') {
            return 0;
        }
        if (magnets(x, y)) {
            if (vtag[x][y] == tag) {
                return 0;
            }
            vtag[x][y] = tag;
            return 1;
        }
        vis[x][y] = true;
        int res = 1;
        for (int d = 0; d < 4; d++) {
            int nx = x + dr[d][0], ny = y + dr[d][1];
            if (check(nx, ny)) {
                res += self(self, nx, ny);
            }
        }
        return res;
    };
    int ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            ++tag;
            ans = max(ans, dfs(dfs, i, j));
        }
    }
    cout << ans << '\n';
    return 0;
}

相关推荐

  1. 2402d,d变量2

    2024-04-28 01:08:01       57 阅读
  2. 整数 d → 字符 ‘d‘ 的转换代码为:d+‘0‘

    2024-04-28 01:08:01       25 阅读
  3. 2312d,D语言单元测试等

    2024-04-28 01:08:01       72 阅读
  4. 2312d,d调用中文C++库

    2024-04-28 01:08:01       66 阅读
  5. 2312d,d的sql构建器

    2024-04-28 01:08:01       61 阅读
  6. 2401d,d导入C的问题

    2024-04-28 01:08:01       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-28 01:08:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-28 01:08:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-28 01:08:01       87 阅读
  4. Python语言-面向对象

    2024-04-28 01:08:01       96 阅读

热门阅读

  1. 解释 RESTful API

    2024-04-28 01:08:01       26 阅读
  2. c++后台开发八股文遗漏复习点

    2024-04-28 01:08:01       30 阅读
  3. 薪酬构成要素:合理配置,满足员工需求

    2024-04-28 01:08:01       34 阅读
  4. 5. HTTPS的特点

    2024-04-28 01:08:01       36 阅读
  5. LeetCode热题Hot100 - 最长有效括号

    2024-04-28 01:08:01       32 阅读
  6. 力扣经典150题第四十题:同构字符串

    2024-04-28 01:08:01       33 阅读
  7. 使用Spring和MyBatis构建流浪猫狗救助网站

    2024-04-28 01:08:01       38 阅读
  8. 力扣1518. 换水问题

    2024-04-28 01:08:01       36 阅读