#include <bits/stdc++.h>
#include "rect.h"
using namespace std;
typedef long long ll;
const int N = 2505;
int n, m, U[N][N], L[N][N], S[N][N];
ll count_rectangles(vector<vector<int>> a){
n = a.size(), m = a[0].size();
ll ans = 0;
if (n < 3 or m < 3) return 0;
for (int i = 0; i < n; i ++){
for (int j = 0; j < m; j ++){
L[i][j] = ((j == 0 or a[i][j - 1] != a[i][j]) ? j : L[i][j - 1]);
U[i][j] = ((i == 0 or a[i - 1][j] != a[i][j]) ? i : U[i - 1][j]);
if (i and j)
S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + a[i][j];
}
}
for (int i = 1; i + 1 < n; i ++){
for (int j = 1; j + 1 < m; j ++){
if (a[i][j]) continue;
int pj = L[i][j];
int pi = U[i][j];
if (pi == 0 or pj == 0) continue;
if (S[i][j] - S[i][pj - 1] - S[pi - 1][j] + S[pi - 1][pj - 1] > 0) continue;
if (U[i][pj - 1] <= pi and U[i][j + 1] <= pi and L[i + 1][j] <= pj and L[pi - 1][j] <= pj)
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... |