Submission #737201

#TimeUsernameProblemLanguageResultExecution timeMemory
737201NeroZeinRectangles (IOI19_rect)C++17
13 / 100
455 ms485232 KiB
#include "rect.h" #include <bits/stdc++.h> using namespace std; const int N = 2503; const int M = N * N; const int di[] = {0, 0, 1, -1}; const int dj[] = {1, -1, 0, 0}; int n, m; int ncc; int vis[N][N]; int pref[N][N]; vector<vector<int>> a; void Dfs (int x, int y) { vis[x][y] = ncc; for (int i = 0; i < 4; ++i) { int nx = x + di[i]; int ny = y + dj[i]; if (nx < 0 || nx >= n || ny < 0 || ny >= m) { continue; } if (vis[nx][ny]) { continue; } if (a[nx][ny] == 1) { continue; } Dfs(nx, ny); } } int mnX[M], mxX[M], mnY[M], mxY[M]; long long count_rectangles(std::vector<std::vector<int> > A) { n = (int) A.size(); m = (int) A[0].size(); a = A; for (int i = 1; i < n - 1; ++i) { for (int j = 1; j < m - 1; ++j) { if (!vis[i][j] && a[i][j] == 0) { ncc++; Dfs(i, j); } } } fill(mnX + 1, mnX + ncc + 1, N); fill(mnY + 1, mnY + ncc + 1, N); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { mnX[vis[i][j]] = min(mnX[vis[i][j]], i); mnY[vis[i][j]] = min(mnY[vis[i][j]], j); mxX[vis[i][j]] = max(mxX[vis[i][j]], i); mxY[vis[i][j]] = max(mxY[vis[i][j]], j); } } for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { pref[i][j] = a[i][j]; if (i - 1 >= 0) { pref[i][j] += pref[i - 1][j]; } if (j - 1 >= 0) { pref[i][j] += pref[i][j - 1]; } if (i - 1 >= 0 && j - 1 >= 0) { pref[i][j] -= pref[i - 1][j - 1]; } } } auto qry = [&](int x, int y, int xx, int yy) { return pref[xx][yy] - pref[xx][y - 1] - pref[x - 1][yy] + pref[x - 1][y - 1]; }; int ans = 0; for (int i = 1; i <= ncc; ++i) { if (mnX[i] > 0 && mxX[i] < n - 1 && mnY[i] > 0 && mxY[i] < m - 1) { ans += qry(mnX[i], mnY[i], mxX[i], mxY[i]) == 0; } } 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...