제출 #973331

#제출 시각아이디문제언어결과실행 시간메모리
973331MilosMilutinovicBomb (IZhO17_bomb)C++14
14 / 100
99 ms81028 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<string> s(n); for (int i = 0; i < n; i++) { cin >> s[i]; } vector<vector<int>> U(n, vector<int>(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (s[i][j] == '0') { continue; } U[i][j] = (i == 0 || s[i - 1][j] == '0' ? i : U[i - 1][j]); } } vector<vector<int>> D(n, vector<int>(m)); for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < m; j++) { if (s[i][j] == '0') { continue; } D[i][j] = (i == n - 1 || s[i + 1][j] == '0' ? i : D[i + 1][j]); } } vector<vector<int>> len(n, vector<int>(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (s[i][j] == '0') { continue; } len[i][j] = D[i][j] - U[i][j] + 1; } } int width = m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (s[i][j] == '0') { continue; } int ptr = j; while (ptr + 1 < m && s[i][ptr + 1] == '1') { ptr += 1; } width = min(width, ptr - j + 1); j = ptr; } } vector<int> mx(m + 1, n); for (int i = 0; i < n; i++) { int bef = -1; int val = (int) 1e9; for (int j = 0; j < m; j++) { if (s[i][j] == '0') { bef = j; val = (int) 1e9; continue; } val = min(val, len[i][j]); mx[j - bef] = min(mx[j - bef], val); } } for (int i = 0; i < n; i++) { int bef = m; int val = (int) 1e9; for (int j = m - 1; j >= 0; j--) { if (s[i][j] == '0') { bef = j; val = (int) 1e9; continue; } val = min(val, len[i][j]); mx[bef - j] = min(mx[bef - j], val); } } for (int i = 1; i < width; i++) { mx[i + 1] = min(mx[i + 1], mx[i]); } int res = 0; for (int i = 1; i <= width; i++) { res = max(res, mx[i] * i); } cout << res << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...