Submission #1281654

#TimeUsernameProblemLanguageResultExecution timeMemory
1281654nicolo_010Rectangles (IOI19_rect)C++20
13 / 100
209 ms50468 KiB
#include <bits/stdc++.h> #include "rect.h" using namespace std; using ll = long long; using pii = pair<int, int>; int n, m; bool valid(int x, int y) { if (x >= 0 && x<n && y >= 0 && y < m) return true; else return false; } ll count_rectangles(vector<vector<int>> a) { n = a.size(); m = a[0].size(); vector<int> dx = {1, 0, -1, 0}; vector<int> dy = {0, 1, 0, -1}; vector<vector<bool>> vis(n, vector<bool>(m, false)); /*vector<vector<int>> rows(n, vector<int>(m, 0)); for (int i=0; i<n; i++) { rows[i][0] = a[i][0]; for (int j=1; j<m; j++) { rows[i][j] = rows[i][j-1] + a[i][j]; } } vector<vector<int>> col(m, vector<int>(n, 0)); for (int i=0; i<m; i++) { col[i][0] = a[0][i]; for (int j=1; j<n; j++) { col[i][j] = a[j][i] + col[i][j-1]; } }*/ ll ans=0; for (int i=1; i<n-1; i++) { for (int j=1; j<m-1; j++) { if (!vis[i][j] && a[i][j] == 0) { vis[i][j] = true; int mnx = i; int mxx = i; int mny = j; int mxy = j; queue<pii> q; q.push({i, j}); int cnt=0; while (!q.empty()) { int ni = q.front().first; int nj = q.front().second; cnt++; q.pop(); for (int k=0; k<4; k++) { int x = ni+dx[k]; int y = nj+dy[k]; if (valid(x, y) && a[x][y] == 0 && !vis[x][y]) { vis[x][y] = true; mxx = max(mxx, x); mnx = min(mnx, x); mny = min(mny, y); mxy = max(mxy, y); q.push({x, y}); } } } if ((mxx-mnx+1) * (mxy-mny+1) == cnt && mny != 0 && mnx != 0 && mxx != n-1 && mxy != m-1) { 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...