제출 #1080332

#제출 시각아이디문제언어결과실행 시간메모리
1080332speedcodeRectangles (IOI19_rect)C++17
0 / 100
131 ms101540 KiB
#include <bits/stdc++.h> using namespace std; long long count_rectangles(std::vector<std::vector<int>> a) { int n = a.size(); int m = a[0].size(); int explored[n][m]; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) explored[i][j] = 0; long long prefix[n][m]; prefix[0][0] = a[0][0]; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(i+j==0) continue; prefix[i][j] = a[i][j]; if(i > 0) prefix[i][j] += prefix[i-1][j]; if(j > 0) prefix[i][j] += prefix[i][j-1]; if(j > 0 && i > 0) prefix[i][j] -= prefix[i-1][j-1]; } } long long prefixLines[n][m+1]; for(int i = 0; i < n; i++){ prefixLines[i][0] = 0; for(int j = 0; j < m; j++){ prefixLines[i][j+1] = a[i][j] + prefixLines[i][j]; } } long long prefixColumns[n+1][m]; for(int i = 0; i < m; i++){ prefixColumns[0][i] = 0; for(int j = 0; j < n; j++){ prefixColumns[j+1][i] = a[j][i] + prefixColumns[j][i]; } } long long res = 0; for(int i = 1; i < n-1; i++){ for(int j = 1; j < m-1; j++){ if(explored[i][j]) continue; explored[i][j] = 1; if(a[i][j] == 1){ continue; } int endX = i; int endY = j; while(endX < n-2 && a[endX+1][endY] == 0){ endX++; explored[endX][j] = 1; } while(endY < m-2 && a[endX][endY+1] == 0){ endY++; for(int u = i; u <= endX; u++){ explored[u][endY] = 1; } } if(prefix[endX][endY] + prefix[i-1][j-1] - prefix[i-1][endY]-prefix[endX][j-1] != 0) continue; long long nbOnes = prefixLines[i-1][endY+1] - prefixLines[i-1][j] + prefixLines[endX+1][endY+1] - prefixLines[endX+1][j] + prefixColumns[endX+1][endY+1] - prefixColumns[i][endY+1] + prefixColumns[endX+1][j-1] - prefixColumns[i][j-1]; if(nbOnes == 2*(endX-i+1) + 2*(endY-j+1)) res++; } } return res; }
#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...