Submission #223999

#TimeUsernameProblemLanguageResultExecution timeMemory
223999super_j6Bomb (IZhO17_bomb)C++14
100 / 100
370 ms74012 KiB
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; #define endl '\n' #define ll long long #define pi pair<int, int> #define f first #define s second const int maxn = 2500; int n, m; int a[maxn][maxn], u[maxn][maxn], d[maxn][maxn]; int dp[maxn]; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++){ char c; cin >> c; a[i][j] = c - '0'; } for(int j = 0; j < m; j++){ dp[j] = n; u[n - 1][j] = n - 1; for(int i = 1; i < n; i++){ d[i][j] = !a[i][j] || !a[i - 1][j] ? i : d[i - 1][j]; u[n - i - 1][j] = !a[n - i - 1][j] || !a[n - i][j] ? n - i - 1 : u[n - i][j]; } } for(int i = 0; i < n; i++) for(int j = 0, l = 0, ul = n - 1, dl = 0, r = m - 1, ur = n - 1, dr = 0; j < m; j++){ if(a[i][j]){ dp[0] = min(dp[0], u[i][j] - d[i][j] + 1); ul = min(ul, u[i][j]), dl = max(dl, d[i][j]); dp[j - l] = min(dp[j - l], ul - dl + 1); }else{ if(j > l) dp[j - l] = 0; l = j + 1; ul = n - 1, dl = 0; } if(a[i][m - j - 1]){ ur = min(ur, u[i][m - j - 1]), dr = max(dr, d[i][m - j - 1]); dp[r + j + 1 - m] = min(dp[r + j + 1 - m], ur - dr + 1); }else{ if(m - j - 1 < r) dp[r + j + 1 - m] = 0; r = m - j - 2; ur = n - 1, dr = 0; } } int ret = 0; for(int i = 0; i < m; i++){ if(i) dp[i] = min(dp[i], dp[i - 1]); ret = max(ret, (i + 1) * dp[i]); } cout << ret << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...