Submission #1011302

#TimeUsernameProblemLanguageResultExecution timeMemory
1011302LucaIlieBomb (IZhO17_bomb)C++17
100 / 100
284 ms74068 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 2500; int mat[MAX_N + 2][MAX_N + 2], up[MAX_N + 2][MAX_N + 2], down[MAX_N + 2][MAX_N + 2], hup[MAX_N + 2], hdown[MAX_N + 2], maxHeight[MAX_N + 2]; int main() { int n, m; cin >> n >> m; for ( int l = 1; l <= n; l++ ) { for ( int c = 1; c <= m; c++ ) { char ch; cin >> ch; mat[l][c] = ch - '0'; } } for ( int l = 1; l <= n; l++ ) { for ( int c = 1; c <= m; c++ ) up[l][c] = (mat[l][c] ? up[l - 1][c] + 1 : 0); } for ( int l = n; l >= 1; l-- ) { for ( int c = 1; c <= m; c++ ) down[l][c] = (mat[l][c] ? down[l + 1][c] + 1 : 0); } int maxWidth = m; for ( int i = 0; i <= m; i++ ) maxHeight[i] = n; for ( int l = 1; l <= n; l++ ) { int cons1 = 0, hup = n, hdown = n; for ( int c = 1; c <= m; c++ ) { if ( mat[l][c] ) { cons1++; hup = min( hup, up[l][c] ); hdown = min( hdown, down[l][c] ); maxHeight[cons1] = min( maxHeight[cons1], hup + hdown - 1 ); maxHeight[1] = min( maxHeight[1], up[l][c] + down[l][c] - 1 ); } else { if ( cons1 > 0 ) maxWidth = min( maxWidth, cons1 ); cons1 = 0, hup = n, hdown = n; } } if ( cons1 > 0 ) maxWidth = min( maxWidth, cons1 ); } for ( int l = 1; l <= n; l++ ) { int cons1 = 0, hup = n, hdown = n; for ( int c = m; c >= 1; c-- ) { if ( mat[l][c] ) { cons1++; hup = min( hup, up[l][c] ); hdown = min( hdown, down[l][c] ); maxHeight[cons1] = min( maxHeight[cons1], hup + hdown - 1 ); } else cons1 = 0, hup = n, hdown = n; } } int maxArea = 0; for ( int i = 1; i <= maxWidth; i++ ) { maxHeight[i] = min( maxHeight[i], maxHeight[i - 1] ); maxArea = max( maxArea, maxHeight[i] * i ); } cout << maxArea; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...