#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<pair<int, int>> delta = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
vector<vector<int>> g;
int n, m;
vector<vector<bool>> vis;
int u, d, l, r, sz;
bool inside(int i, int j) {
    return i >= 0 && i < n && j >= 0 && j < m;
}
void dfs(int i, int j) {
    if (!inside(i, j) || g[i][j] || vis[i][j]) return;
    vis[i][j] = true;
    sz++;
    u = min(u, i);
    d = max(d, i);
    l = min(l, i);
    r = max(r, i);
    for (auto [di, dj]: delta) {
        dfs(i + di, j + dj);
    }
}
ll count_rectangles(vector<vector<int>> G) {
    g = G;
    n = g.size();
    m = g[0].size();
    vis.assign(n, vector<bool>(m, false));
    ll ans = 0;
    for (int i = 1; i < n-1; i++) {
        for (int j = 1; j < m-1; j++) {
            u = n;
            d = 0;
            l = m;
            r = 0;
            sz = 0;
            if (!vis[i][j] && g[i][j] == 0) {
                dfs(i, j);
            }
            if (u == 0 || d == n || l == 0 || r == m) continue;
            if ((abs(u - d) + 1) * (r - l + 1) == (r - l + 1) * (abs(u - d) + 1) && (abs(u - d) + 1) * (r - l + 1) == sz) {
                ans++;
            }
        }
    }
    return ans;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |