제출 #415791

#제출 시각아이디문제언어결과실행 시간메모리
415791MlxaRectangles (IOI19_rect)C++14
13 / 100
613 ms441916 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define all(x) x.begin(), x.end() #define mp make_pair #define mt make_tuple #define x first #define y second #include "rect.h" namespace my { const int N = 2520; const int INF = N; int n, m; int a[N][N]; bool used[N][N]; int cnt = 0; int li, lj, ri, rj; bool bad; void dfs(int i, int j) { if ((i == 0 || j == 0 || i == n - 1 || j == m - 1) && !a[i][j]) { bad = true; return; } if (used[i][j] || a[i][j] || i < 1 || i > n - 2 || j < 1 || j > m - 2) { return; } used[i][j] = true; li = min(li, i); ri = max(ri, i); lj = min(lj, j); rj = max(rj, j); ++cnt; dfs(i - 1, j); dfs(i + 1, j); dfs(i, j - 1); dfs(i, j + 1); } } ll count_rectangles(vector<vector<int>> _a) { using namespace my; n = (int)_a.size(), m = (int)_a[0].size(); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { a[i][j] = _a[i][j]; } } int answer = 0; for (int i = 1; i < n - 1; ++i) { for (int j = 1; j < m - 1; ++j) { if (used[i][j] || a[i][j]) { continue; } cnt = 0; bad = false; li = INF, lj = INF, ri = -INF, rj = -INF; dfs(i, j); if (!bad && cnt == (ri - li + 1) * (rj - lj + 1)) { ++answer; } } } return answer; } #ifdef LC #include "grader.cpp" #endif
#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...