제출 #1237179

#제출 시각아이디문제언어결과실행 시간메모리
1237179Ghulam_JunaidRectangles (IOI19_rect)C++20
13 / 100
165 ms122988 KiB
#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 (a[i][pj - 1] == 1  and a[i][j + 1] == 1  and a[i + 1][j] == 1  and a[pi - 1][j] == 1 and
                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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...